スポンサーリンク
MIZUNO SHOP ミズノ公式オンラインショップ
スポンサーリンク
フェリシモ「コレクション」

Crystal Reports でユーザー設定用紙の印刷を行う場合。

C#

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 インチ");

コメント

スポンサーリンク
カタログ通販ベルーナ(Belluna)
スポンサーリンク
タイトルとURLをコピーしました