Foxit J-Reader
ググってみるとFoxit J-Reader
のコマンドで印刷する方法を一番よく目にするが、Foxit J-Reader
をインストールする必要があるのでできれば、この方法は避けたい。
GhostScript
GhostScriptを使えば出来そう。
Wikipediaによると
Ghostscript(ゴーストスクリプト)は、PostScript や Portable Document Format (PDF) などアドビシステムズのページ記述言語用のインタプリタおよび、それを基にしたソフトウェアパッケージのことである。
とのこと。 良く分からんが、色々調べるとPDFをPNG、JPEG、TIFとかの画像ファイルに変換する機能があるらしいのでそれを利用する。
GhostSciprtのDLLを使ってPDFを画像ファイルに変換
参考にしたのはこの記事(How To Convert PDF to Image Using Ghostscript API)。
記事にはサンプルコードが書かれているが、サンプルコードをダウンロードできるので、ダウンロードしてそのまま流用する。
実装
GhostSciptをC#から使用する為の準備
-
プロジェクトを作っておく。
-
GhostSciprtをダウンロードしてインストール。
-
インストールフォルダに
gsdll32.dll
があるので、作成したプロジェクトのフォルダにコピーする。 -
プロジェクトのプロパティでビルド時にDLLが出力先フォルダにコピーされるようにビルドイベントにコマンドを記述する。こんな感じ
Copy /Y "$(SolutionDir)lib\GhostScript\gsdll32.dll" "$(TargetDir)"
-
参考記事からソースをダウンロード。(※CodePejectのアカウントが必要)
-
ダウンロードしたソースから
PDFConvert.cs
をプロジェクトフォルダ内にコピー。
変換と印刷処理
処理の大まかな流れはこんな感じ。
- GhostScriptでPDFを画像に変換
-
System.Drawing.Printing.PrintDocument
オブジェクトを生成 -
PrintDocument.Print()
メソッドで印刷 - イベントハンドラの引数に渡されるGraphicsオブジェクトを使って
PrintDocument.PrintPage
イベント内で変換した画像を書き込む
サンプルコード
//
// Convert PDF to Image.
//
var src = @"path\to\src.pdf";
var dst = @"path\to\dst.tif";
PdfConvert pc = new PdfConvert();
pc.OutputFormat = "tifflzw"; // TIFF
pc.Convert(src, dst);
//
// Create PrintDocumnt object and execute print.
//
using (var pd = new PrintDocument())
{
pd.DocumentName = "sample";
pd.PrintPage += new PrintPageEventHandler((s, e) =>
{
using (var img = Image.FromFile(dst))
{
e.Graphics.DrawImage(img, e.MarginBounds);
}
e.HasMorePages = false;
});
pd.Print();
}