GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

Horizontal?Vertical?.NETで両面印刷するときに迷ったので図解してみた

帳票を扱うアプリケーションにおいて、印刷は切っても切り離せません。

その中でも、運用するユーザーの負担軽減や誤操作防止のため、用紙のサイズや向きなどの印刷設定をアプリケーション側であらかじめ設定しておく、というのはよくある要件です。

その中でもよくあるのが両面印刷です。.NET FrameworkのPrintDocumentなどで両面印刷する場合、PrinterSettings.Duplexプロパティを使用します。

PrinterSettings.Duplex Property (System.Drawing.Printing) | Microsoft Docs
Duplex Enum (System.Drawing.Printing) | Microsoft Docs

HorizontalVerticalを指定することで両面印刷の設定を行うことができますが、上記リンク先の列挙体の説明を見てもいまいちどのように印刷されるかピンときませんね。また、この設定は用紙の向きの影響も受けます。

というわけでDuplexプロパティの設定値と用紙の向きの関係を図解してみました。これでもう両面印刷で迷う必要はありません!

両面印刷におけるDuplexプロパティと用紙の向きの関係

実際の動作を元にDuplexプロパティと用紙の向きの関係を図にすると以下のようになります。

f:id:GrapeCity_dev:20181114145616p:plain:w450

f:id:GrapeCity_dev:20181114145626p:plain

こうしてみると、Horizontalは「短辺綴じ」、Verticalは「長辺綴じ」として印刷されることが分かります。

印刷設定が正しく反映されない場合は?

前述のようにDuplexプロパティと用紙の向き設定しているにもかかわらず、実際に印刷してみると正しく設定が反映されないことがあります。

これは.NET Frameworkの印刷機能による最終的な印刷結果(両面印刷に限らず)は、使用するプリンタやプリンタドライバに依存してしまうためです。

うまく設定が反映されない場合は、使用するプリンタのプリンタドライバを変更(最新のものに更新)したり、プリンタ側の設定を適宜変更したりすることで解決できる場合もありますのでお試しください。

(おまけ)ActiveReportsで両面印刷を設定するには?

帳票開発ツール「ActiveReports for .NET」の印刷処理も内部的に.NET Frameworkの印刷機能を使用しているので、両面印刷を行うには同様にSystem.Drawing.Printing名前空間に定義されたDuplexプロパティを使用します。

今回はActiveReports for .NETを使用したWindowsフォームアプリケーションで、コードから両面印刷を行う方法を紹介したいと思います。

セクションレポート編

セクションレポートの印刷の設定は「レポートの設定」ダイアログから帳票のデザイン時に行うこともできますが、今回はコードから行う方法を紹介します。以下のようになります。

using GrapeCity.ActiveReports;
・
・
・
// セクションレポートのインスタンスを生成します。
SectionReport1 rpt = new SectionReport1();

// レポートを実行します。
rpt.Run(false);

// 用紙の向きを「縦」に設定します。
rpt.Document.Printer.Landscape = false;

// 両面印刷を設定します。
rpt.PageSettings.Duplex = System.Drawing.Printing.Duplex.Vertical;

// 第1引数をfalseにすると印刷ダイアログの表示をスキップして印刷します。
rpt.Document.Print(false, true, false);

注意:上記サンプルコードのPrintメソッドはGrapeCity.ActiveReports.Viewer.Win.v12アセンブリのGrapeCity.ActiveReports名前空間にあるPrintExtension.Printメソッドの拡張メソッドとして実装されているため、使用するにはプロジェクトにGrapeCity.ActiveReports.Viewer.Win.v12への参照を追加する必要があります。
参考情報:ActiveReportsでのPrintメソッドの使用

f:id:GrapeCity_dev:20181114161431p:plain:w400

なお、前述の通りActiveReportsの印刷処理は.NET Frameworkの印刷機能を使用しているので、最終的な印刷結果は使用するプリンタやプリンタドライバに依存します。うまく設定が反映されない場合は、同様にプリンタ側の設定やドライバーの設定を調整してみて下さい。

ページ/RDLレポート編

続きましてページ/RDLレポートの場合の設定方法です。

using GrapeCity.ActiveReports;
・
・
・
// ページレポートファイル(.rdlx)をロードします。
string file_name = "PageReport1.rdlx";
GrapeCity.ActiveReports PageReport rpt
    = new GrapeCity.ActiveReports PageReport(new System.IO.FileInfo(file_name));
GrapeCity.ActiveReports.Document.PageDocument pageDocument
    = new GrapeCity.ActiveReports.Document.PageDocument(rpt);

// 用紙の向きを「縦」に設定します。
pageDocument.Printer.Landscape = false;

// 両面印刷に設定します。
pageDocument.Printer.PrinterSettings.Duplex
    = System.Drawing.Printing.Duplex.Vertical;

// 第1引数をfalseにすると印刷ダイアログの表示をスキップして印刷します。
rpt.Document.Print(false, true, false);

印刷以外の機能も充実したActiveReportsを試すには?

ActiveReportsは印刷だけでなく、縦書きのような日本独自の仕様に対応した機能や、PDFやExcelへの出力など、帳票に求められるありとあらゆる機能をサポートしています。

ActiveReportsを手軽に試せるデモアプリケーションを以下で公開していますので、是非アクセスしてみて下さい!