ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

CrystalReportsでプリンター名を設定する方法

CrystalReportsで任意で選択したプリンターで印刷を行いたい場合、通常のプリンター指定では認識されないようです。

認識させるには、少し特殊な指定が必要なようです。

動作環境

Windows 10
VisualStudio Community 2015 Update3
.NETFramework 4.6.1
CrystalReports 13.0.20

通常の設定方法

こちらの設定で行っても指定したプリンターで印刷はされません。

public void Print(PrinterSettings settings)

    // デザイナーで定義したレポート
    TestReport r = new TestReport();
    r.Load();
    r.Refresh();

    // 給紙トレイ設定
    r.PrinterOptions.CustomPaperSource = settings.DefaultPageSettings.PaperSource;

    // プリンター名設定
    r.PrinterOptions.PrinterName = settings.PrinterName; // ←設定されない!!

    // 印刷実行
    r.PrintToPrinter(printer.Copies, false, 0, 0);
}

正しい設定方法

1.プロジェクトの参照からアセンブリタブにある4項目を追加する

  • CrystalDecisions.ReportAppServer.ClientDoc
  • CrystalDecisions.ReportAppServer.Controllers
  • CrystalDecisions.ReportAppServer.DataDefModel
  • CrystalDecisions.ReportAppServer.ReportDefModel


2.プリンター名の設定方法を次のように変更する

public void Print(PrinterSettings settings)

    // デザイナーで定義したレポート
    TestReport r = new TestReport();
    r.Load();
    r.Refresh();

    // 給紙トレイ設定
    r.PrinterOptions.CustomPaperSource = settings.DefaultPageSettings.PaperSource;

    // プリンター名設定
    // r.PrinterOptions.PrinterName = settings.PrinterName;
    ISCDReportClientDocument cdoc = r.ReportClientDocument;
    cdoc.PrintOutputController.GetPrintOptions().PrinterName = printer.PrinterName;

    // 印刷実行
    r.PrintToPrinter(printer.Copies, false, 0, 0);
}