Crystal Reports が標準でサポートしている用紙サイズ以外に、ユーザーが独自に設定した用紙サイズ(11×5 インチ など)で印刷する場合、対象の端末全てに用紙サイズを登録しますが、Crystal Reports の場合、それだけでは実現できません。
Crystal Reports は用紙設定を「11×5 インチ」などの名称で保持せず、インデックス化して保持し、また、そのインデックスはPC毎に異なる為、Crystal Reports を実行したPCから、必要な用紙サイズのインデックスを、取得する必要があります。
その為の共通メソッドを作りました。このメソッドのreturn値を、Crystal Reports の PaperSize に設定すれば、PCによって用紙サイズが変わるといったバグは解決できます。
1、このメソッドを実装する際に必要となる参照設定はこの辺です。
1 2 3 4 5 6 7 8 9 10 |
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、これがメソッドの実態です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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)でキャストする必要があります。
1 2 3 4 |
CrystalReport1 MyReport = new CrystalReport1(); MyReport.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)GetPaperSize("LBP4500", "11×5 インチ"); |
コメント