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++で組みたい気持ちが強い。いずれそいつを探し出して、いじってみようかなと。
[…] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]
[…] CAD日記 PDFium ViewerによるPDFレンダリングがイケてるテックメモ C# PDFiumでPDFを読み込む […]