CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

PDFium ViewerによるPDFレンダリングがイケてる

投稿日:2018年9月1日 更新日:

PDFが電子ペーパーの絶対的な標準になったなか、PDFをプログラムであつかうのがとても簡単になってきた。ブラウザ戦争の勝者であるGoogle ChromeがPDFレンダリングエンジンに採用しているPDFium(ピーディーエフ・イアム)。ライセンスは修正BSDライセンスなので、企業が商用利用する上でのハードルは低い。ていうか、ハードルなんてないと言ってもいい。

今日は、VisualStudioでPDFium Viewerなる便利な部品を使ってPDFをJpegにするというチョー簡単なプログラムに取り組んでみる。言語はC#だから、おいらにとっては専門外だが、何事もやってみないと始まらないんで。。
1.新しいプロジェクトでWindowsフォームアプリケーションを作成
2.ツール → NuGetパッケージマネージャー → ソリューションのNuGetパッケージ管理
3.参照 でPdfiumViewer を検索して、以下2つをインストール
 PdfiumViewer、PdfiumViewer.Native.x86_64.v8-xfa
4.プロジェクトのプロパティ → ビルドで「32ビットを優先」 のチェックを外す
5.フォームにボタンを配置
6.ボタンのクリックイベントに以下3行を挿入(ファイル名は適宜変更)
 PdfDocument pdfDoc = PdfDocument.Load(“C:\\work\\test.pdf”);
 Image img = pdfDoc.Render(0, 300, 300, false);
 img.Save(“C:\\work\\test.jpg”, ImageFormat.Jpeg);
7.参照を解決するために以下2行を追加
 using PdfiumViewer;
 using System.Drawing.Imaging;
8.ビルドして実行

test.pdfの1ページ目をtest.jpgにすることができたでしょ。なんとまぁ簡単なことか。Renderメソッド引数の意味は以下の通り。
PdfDocument.Reader(int page, float dpiX, float dpiY, bool forPringing);
PDFは複数ページあるわけだから、全ページ分のラスタライズをしてあげましょ。

using PdfiumViewer;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PDFiumTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            PdfDocument pdfDoc = PdfDocument.Load("D:\\work\\test.pdf");
            for (int i = 0; i < pdfDoc.PageCount; i++)
            {
                Image img = pdfDoc.Render(i, 300, 300, false);
                string output = string.Format("D:\\work\\test{0}.jpg", i+1);
                img.Save(output, ImageFormat.Jpeg);
            }
        }
    }
}

今回はPDFium ViewerというC#の部品を使ってみたわけだが、PDFium本体はC++の部品らしい。世間的にはドットnetたるC#のほうが使いやすいんだろうけど、おいらとしては使い慣れたC++で組みたい気持ちが強い。いずれそいつを探し出して、いじってみようかなと。

-ソフト開発

執筆者:


  1. […] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]

  2. […] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか。。とここ数日考えていた。そんなことをしたい理由と要件をはっきりさせておく。 対象のファイルやフォルダ …

PDFへの捺印をpdfでするだけでなくpng画像でもできるようにしたPDFアレコレを公開

昨日に引き続き今日もPDFアレコレをバージョンアップ。変更点は以下の通り。 Ver2.03 2020/3/22 ・捺印データとしてpng画像に対応した。 ・捺印時にマウスカーソルにプレビューデータを表 …

PDFアレコレでPDF暗号化(セキュリティ設定)の第一歩を踏み出した

PDFアレコレをバージョンアップ。約2か月ぶり。 Ver3.01 2020/7/26 ・セキュリティ設定を変更できるようにした。読取パスワード、編集パスワード、編集許可の各種項目が設定可能。  暗号化 …

no image

いたちごっこ2

恐るべしクラッカー。万全と思われた対策も空しく、2回目のクラックが行われたところから話は始まります。 ●2度目のクラック 開発者は、某シリアル系クラックサイトで2度目の衝撃の遭遇しました。クラック結果 …

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.1】

Teigha改めODA(Open Design Alliance)は有料のライブラリー。商用利用するならば、最低でも年間1500ドル(初年度2000ドル)を要する。この場合、配布本数が100本に限られ …