cancel
Showing results for 
Search instead for 
Did you mean: 

WinForm からレポートをプリンタに出力した際に、余白(PageMargins)に設定した値が正しく適用されない。

Former Member
0 Kudos

初めて投稿致します。秋本と申します。

WinForm から CrystalReports2008 で作成したレポートを印刷する際に

余白(PageMargins)に設定した値が正しく適用されないという現象が発生しており、対応策をご教示ください。

【開発環境】

 Microsoft Windows XP ver 2002 Service Pack 3

 Microsoft VisualStudio 2008 ver 9.0.30729.1 SP (C#を使用)

 Microsoft .NET Framework ver 3.5 SP1

 Crystal Reports 2008 Developer ver 12.2.7.598

 検証用のPCにOSをインストールし、VisualStudio 2008 をインストール後

 Microsoft Update にて 2010-05-18 時点でリリースされている全ての更新プログラムをインストール

 その後で Crystal Reports 2008 をインストールし、Crystal Reports 2008 の Service Pack 1、Service Pack 2、

 Fix Pack 2.7 を順にインストールしました。

 プリンタは以下の3台

 Epson LP-8900 (ドライバは 3.16.4fm)

  http://www.epson.jp/dl_soft/readme/6653.htm

 

 XEROX DocuCenter Color f250 (ドライバは 2.6.3)

  http://www.fujixerox.co.jp/download/dcc/download/f450series/artex_2k/

 

 XEROX DocuPrint210 (ドライバは 3.8.6)

  http://www.fujixerox.co.jp/download/docuprint/download/210series/prt_2k/

【実行環境】

 同上

【再現手順】

 VisualStudio 2008 で新規に WIndowsフォームアプリケーションを作成

 フォームに CrystalReportsViewer と ボタンを設置

 

 新しい項目として Crystal レポート を追加

 CrystalReportsギャラリから、空のレポートを選択

 詳細以外のセクションを非表示に設定

 詳細セクションのセクションエキスパートで背景色に銀色を設定

 詳細セクションの Height を 16771 に設定

 デザイン>ページ設定のページオプションで

 「書式設定ページサイズと用紙サイズを個別に設定する」のチェックを外し

 用紙サイズを「A4 210 x 297 mm」に設定

 余白は上下左右すべて 0 に設定

 詳細セクションの左上、右上、左下、右下に何か適当に文字の入ったテキストオブジェクトを配置

 ボタンの押下イベントに以下を記述

 private void button1_Click(object sender, EventArgs e)

 {

   CrystalReport1 report = (CrystalReport1)crystalReportViewer1.ReportSource;

   

   CrystalDecisions.Shared.PageMargins margins = new CrystalDecisions.Shared.PageMargins();

   margins.topMargin = 0;

   margins.bottomMargin = 0;

   margins.leftMargin = 0;

   margins.rightMargin = 0;

   report.PrintOptions.ApplyPageMargins(margins);

   

   crystalReportViewer1.RefreshReport();

   

   report.PrintToPrinter(0, false, 1, 1);

 }

 上記イベント内に任意の余白を設定して、WinForm を実行後にボタン押下

【発生する現象】

 u2026要はA4用紙全体を塗りつぶすだけのレポートに、上記イベント内で PageMargins を設定して

 プリンタへ出力するわけですが

 CrystalReportViewer 上では設定した余白(PageMargins)が忠実に反映されるのですが、実際にプリンタから

 出力されたものを確認すると

 

 leftMargin だけ設定した場合 > 左に余白ができず、上と右に余白ができる

 topMargin だけ設定した場合 > 上に余白ができず、左と下に余白ができる

 という具合に余白(PageMargins)で設定した値とは違う印刷結果になってしまいます。

 

 上記スレッドの内容からすると SP3 がリリースされるまで待つしかないのでしょうか?

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

上記スレッド内のRASを使う方法で、一応解決致しました。

【手順】

参照設定に以下を追加

CrystalDecisions.ReportAppServer.ClientDoc;

CrystalDecisions.ReportAppServer.Controllers;

CrystalDecisions.ReportAppServer.DataDefModel;

CrystalDecisions.ReportAppServer.ReportDefModel;

余白の設定を以下に変更

CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rcd;

rcd = report.ReportClientDocument;

CrystalDecisions.ReportAppServer.Controllers.PrintOutputController poc;

poc = rcd.PrintOutputController;

poc.ModifyPageMargins(margins.leftMargin, margins.rightMargin, margins.topMargin, margins.bottomMargin);

poc.PrintReport(null);

これで、通常使うプリンタに正しい余白で出力する事ができました。

過去スレッドの探索不足でした、お騒がせして申し訳ありません。