皆さんこんにちはこんばんは、まずここブログを運営してる「よーす」です。
今日は、PDFを画像データに変えたい!っという声が多かったので
紹介していきたいと思います。
声が多かったというのは、嘘です(笑)
コメントする欄がないので、皆さんの声はまだ私に届きません、、、
これは改善するとして、
今回紹介しようと思ったきっかけは、現在取り掛かっているプロジェクトで
どうしても「PDFをTIFF」に変換する必要があり、思ったりより苦労したので
同じように困っている人がいるのではないかと思ったからです。
それでは、いってみましょう!!
開発環境
PDFを画像データ(TIFF)に変換するプロジェクトで使用した環境がこちら
開発環境
- Windows10
- Visual Studio 2019
- .Net Framwork 4.7.2 ( WPF )
- 32bit / 64bit(どちらでもオッケー)
「PdfiumViewer」PDFを画像データに変換するライブラリ
開発始めた当初は、標準のライブラリで簡単にできるだろとなめていたんですが
全然できなく、色々調べてみました。
有料版のものであれば結構見つかったですが
無料の物があまりなく、最終的に見つかった無料のものがこちら
見つかったライブラリ
- Ghostscript
- Pdfium
両方とも使ってみましたがどうしてもGhostscriptが動かなかったので
消去法で「Pdfium」を使用することにしました。
必要なNuGetライブラリ
Visual Studio 2019で開発しているのであれば
NuGetパッケージの管理から簡単にライブラリの追加が可能です。
今回必要なライブラリは、最低でも2つ。必要な人は3つ。
動作させるPCのシステムの種類(ビット数)によって違うので分けてあります。
32Bit
- PdfiumViewer
- PdfiumViewer.Native.x86.v8-xfa
64Bit
- PdfiumViewer
- PdfiumViewer.Native.x86_64.v8-xfa
以上のライブラリをNuGetパッケージの管理から追加してください。
私は、32と64両方に対応させるため3つともインストールしています。
実装するコードサンプル
using System; using System.Drawing.Imaging; private void Button_Click(object sender, RoutedEventArgs e) { // 以下の変数にはお好きなファイルパスを入れてください。 string pdfPath = ”@"C:\Users\サンプル\Documents\Example.pdf"”; string outputPath = @"C:\Users\サンプル\Documents\Example.tif"; try { // PDFをロード PdfiumViewer.PdfDocument document = PdfiumViewer.PdfDocument.Load(pdfPath); //PDFから画像データを作成 var image = document.Render(0, 600, 600, false); //画像をセーブ image.Save(outputPath, ImageFormat.Tiff); } catch (Exception ex) { // handle exception here; } }
重要なのは、
- PdfiumViewer.PdfDocument document = PdfiumViewer.PdfDocument.Load(pdfPath);
- var image = document.Render(0, 600, 600, false);
特にdocument.Renderの方は、引数をもっといじれるので色々試してみるといいと思います。
ちなみに600というのはDPIです。
次なる問題点
まだ解決していないのですが、
PDFをTIFFに変換すると画像が荒くなるので、できればそこを少しでも改善したいなと思っています。
PDFの画像
TIFFの画像
document.Renderの引数のXとYのサイズを変えるとある程度改善されたが
画像サイズが予定より大きくなってしまうのが気になるところ。
まとめ
OCR関連の開発をしている方は、結構必要になるのではないかなっと思っています
少しでも困っている開発者様の助けになれば嬉しいです。
最後まで読んで頂きありがとうございました。