プログラミング

【C#】PDFを画像データ(TIFF)に変換する方法「PdfiumViewer」(How to convert PDF to TIFF)

皆さんこんにちはこんばんは、まずここブログを運営してる「よーす」です。

 

今日は、PDFを画像データに変えたい!っという声が多かったので

紹介していきたいと思います。

 

声が多かったというのは、嘘です(笑)

コメントする欄がないので、皆さんの声はまだ私に届きません、、、

 

これは改善するとして、

今回紹介しようと思ったきっかけは、現在取り掛かっているプロジェクトで

どうしても「PDFをTIFF」に変換する必要があり、思ったりより苦労したので

同じように困っている人がいるのではないかと思ったからです。

 

それでは、いってみましょう!!

開発環境

PDFを画像データ(TIFF)に変換するプロジェクトで使用した環境がこちら

開発環境

  • Windows10
  • Visual Studio 2019
  • .Net Framwork 4.7.2 ( WPF )
  • 32bit / 64bit(どちらでもオッケー)

 

「PdfiumViewer」PDFを画像データに変換するライブラリ

開発始めた当初は、標準のライブラリで簡単にできるだろとなめていたんですが

全然できなく、色々調べてみました。

 

有料版のものであれば結構見つかったですが

無料の物があまりなく、最終的に見つかった無料のものがこちら

 

見つかったライブラリ

  1. Ghostscript
  2. 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関連の開発をしている方は、結構必要になるのではないかなっと思っています

少しでも困っている開発者様の助けになれば嬉しいです。

 

最後まで読んで頂きありがとうございました。

  • この記事を書いた人
  • 最新記事

よーす

アメリカテキサスに留学&卒業後アメリカ現地(アリゾナ州)就職し、その後、9カ月かけて世界25カ国を旅してました。そんな経験を活かし、現在はC#を中心にソフトフェアの開発をしています。

-プログラミング

Translate »

Copyright © まずここまずここ , All Rights Reserved.