PDFの画像化
PDFやPSなどのファイルはGhostScriptを使うことで、PNGやJpegなどの画像に変換することができる
- 素直研究所 技術開発部C#でGhostscriptを使ってPDFのページイメージをJpegファイルに保存する方法
- FreeBSD QandA 774
- Ghostscript - TeX Wiki
- http://pages.cs.wisc.edu/~ghost/doc/cvs/Use.htm
一番上のサイトを見ればC#を使って画像ファイルに変換することができる。
また、DLLを使って変換するなんてのもある
- 日々、オタおっさん化 【作業メモ】PDFから画像サムネイルを生成 (C#)
- How To Convert PDF to Image Using Ghostscript API - CodeProject
こっちのほうがやや敷居が高いかも知れない
ただ、画像に変換したファイルを再びC#のプログラム内で利用したい場合、一旦記憶媒体に書き込むのは無駄である。そこで標準出力に変換した画像データを書き込んでもらうことでメモリ上でやり取りする方法を考えた。基本的には「素直研究所 技術開発部C#でGhostscriptを使ってPDFのページイメージをJpegファイルに保存する方法」のパクリなのだが、出力先に-を指定することで標準出力に出力させ、それをC#で拾い、それをImageクラスで読み込みPictureBoxに表示することをやってみた
string strPdfPath = @"PDF.pdf"; string strGSPath = @"C:\gs\gs8.64\bin\gswin32c.exe"; int ShowPage = 2; int Resolution = 300; string Format = "pngalpha"; string Password = null; using (Process ghostscript = new Process()) { { var StartInfo = ghostscript.StartInfo; StartInfo.FileName = strGSPath; { StartInfo.Arguments = " -q"; StartInfo.Arguments += " -dSAFER"; StartInfo.Arguments += " -dBATCH"; StartInfo.Arguments += " -dNOPAUSE"; StartInfo.Arguments += " -sDEVICE=" + Format.ToString(); StartInfo.Arguments += " -r" + Resolution.ToString(); StartInfo.Arguments += " -sOutputFile=-"; StartInfo.Arguments += " -dFirstPage=" + ShowPage; StartInfo.Arguments += " -dLastPage=" + ShowPage; if (!string.IsNullOrEmpty(Password)) StartInfo.Arguments += "-sPDFPassword =" + Password; StartInfo.Arguments += " " + strPdfPath; } StartInfo.CreateNoWindow = true; StartInfo.UseShellExecute = false; StartInfo.RedirectStandardOutput = true; } ghostscript.Start(); using (var output = ghostscript.StandardOutput.BaseStream) { this.pictureBox.Image = Image.FromStream(output); } //ghostscript.WaitForExit(); }
これはいろいろ役立つかもしれない。圧縮効率が悪いPDFを読み込んで画像に変換し、それを減色し、再びPDFに直せばサイズが小さくなるかもしれない。
ただしGhostScriptをインストールしてないといけないのと、画像の抽出はできていないのが難点かな
画像抽出はこちらを参考にしてください