Crystal Reports が標準でサポートしている用紙サイズ以外に、ユーザーが独自に設定した用紙サイズ(11×5 インチ など)で印刷する場合、対象の端末全てに用紙サイズを登録しますが、Crystal Reports の場合、それだけでは実現できません。
Crystal Reports は用紙設定を「11×5 インチ」などの名称で保持せず、インデックス化して保持し、また、そのインデックスはPC毎に異なる為、Crystal Reports を実行したPCから、必要な用紙サイズのインデックスを、取得する必要があります。
その為の共通メソッドを作りました。このメソッドのreturn値を、Crystal Reports の PaperSize に設定すれば、PCによって用紙サイズが変わるといったバグは解決できます。
1、このメソッドを実装する際に必要となる参照設定はこの辺です。
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Reflection;
using System.Data;
using System.IO;
2、これがメソッドの実態です。
public static int GetPaperSize(string strPrinterName, string strPaperName)
{
PrintDocument doctoprint = new PrintDocument();
doctoprint.PrinterSettings.PrinterName = strPrinterName;
int rawKind = 0;
for (int i = 0; i < doctoprint.PrinterSettings.PaperSizes.Count; i++)
{
if (doctoprint.PrinterSettings.PaperSizes[i].PaperName.Equals(strPaperName) == false)
continue;
rawKind = Convert.ToInt32(doctoprint.PrinterSettings.PaperSizes[i].GetType()
.GetField("kind", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(doctoprint.PrinterSettings.PaperSizes[i]));
break;
}
return rawKind;
}
3、このメソッドのreturn値を使うには、(CrystalDecisions.Shared.PaperSize)でキャストする必要があります。
CrystalReport1 MyReport = new CrystalReport1();
MyReport.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)GetPaperSize("LBP4500", "11×5 インチ");
最近のコメント