LoginSignup
33
40

More than 5 years have passed since last update.

C#でPDFを直接印刷する処理を実装する。

Last updated at Posted at 2015-11-10

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#から使用する為の準備

  1. プロジェクトを作っておく。
  2. GhostSciprtをダウンロードしてインストール。
  3. インストールフォルダにgsdll32.dllがあるので、作成したプロジェクトのフォルダにコピーする。
  4. プロジェクトのプロパティでビルド時にDLLが出力先フォルダにコピーされるようにビルドイベントにコマンドを記述する。こんな感じCopy /Y "$(SolutionDir)lib\GhostScript\gsdll32.dll" "$(TargetDir)"

  5. 参考記事からソースをダウンロード。(※CodePejectのアカウントが必要)

  6. ダウンロードしたソースからPDFConvert.csをプロジェクトフォルダ内にコピー。

変換と印刷処理

処理の大まかな流れはこんな感じ。

  1. GhostScriptでPDFを画像に変換
  2. System.Drawing.Printing.PrintDocumentオブジェクトを生成
  3. PrintDocument.Print()メソッドで印刷
  4. イベントハンドラの引数に渡される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();
}
33
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
40