[ActiveReports] 環境によって余白やページサイズが変わるのを防ぐには
久々にドツボ。
本番環境と開発環境で、ActiveReportsで作ったPDFのページサイズが違う・・・
クライアントからの問い合わせで発覚。
<開発環境>
Visual Studio2008 C# / ASP.NETのWebアプリ
.NET Framework 2.0
ActiveReports for .NET 3.0J SP3 Version 5.2.1053.1
<ページサイズの違い>
開発環境:222.2mm×296.7mm(※現行システムもこのサイズ
本番環境:222.2mm×279.4mm
なんと2cm弱も違う。
現行システムから、ページ設定は1ミリも変えてないのになぜ…?
最初は、レポートデザインのDetailやPageFooterの縦の長さを変えたらいけるだろうと思ってたら、全然うまくいかず。
余白を2cm削ってみたものの、現行システムと全く同じのレイアウトにならないので微妙…。
ActiveReports for .NET 3.0Jのリリースノートには、
レポートの作成および表示処理は、ご利用の環境のハードウェア構成等に依存します。
特定のOS、プリンタ、ドライバなどの組み合わせによって、プレビューや印刷結果が異なったり、一部正しく出力されない場合があります。
ftp://ftp.grapecity.com/trial/ActiveReportsNET/ReleaseNote_5210531.htm
と書いてある。
じゃあ原因は、サーバの環境依存なのかな?
というところまではわかったんだけど、結局どうすれば良いかわからず、藁にもすがる思いで、
先輩に「どーすればいいんですか(>Д<;)」と聞いてみた。
そしたらすんなり、方法を教えてもらえた!さすが先輩(・∀・)
参考URL
http://www.ilovex.co.jp/Division/SRD/archives/2008/03/activereportpdf.html
これと、先輩の送ってくれたコードを元に、
こんな関数を追加してみた。
/// PDFページ設定
/// </summary>
/// <typeparam name="ReportType">帳票タイプ</typeparam>
/// <param name="rpt">帳票インスタンス</param>
/// <remarks>サーバ環境依存によるページ設定違い回避</remarks>
public static void PdfSetting<reporttype>(DataDynamics.ActiveReports.ActiveReport3 rpt)
where ReportType : DataDynamics.ActiveReports.ActiveReport3
{
rpt.Document.Printer.PrinterName = "";//プリンタの設定を使用しないようにする
rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4;
rpt.PageSettings.PaperWidth = (float)8.27;//inch
rpt.PageSettings.PaperHeight = (float)11.69;//inch
}
これを帳票インスタンス生成時に
...PdfSetting<reporttype01>(this);
とか書いてやれば、初期化してくれるどの帳票で呼び出しても大丈夫(・∀・)
参考URLの記事は、自分でも調べてたときにヒットして一読してたのに、すっかり見落としてた…
これを読んで必要な情報かどうか判断できるというのは技術と経験の差だわね…
自分の未熟さを実感したので、これからも精進しないと><


コメント