コード上で「プリント サーバー プロパティ」等から追加した用紙サイズを取得・設定する方法は?

文書番号 : 33924     文書種別 : 使用方法     登録日 : 2013/05/15     最終更新日 : 2015/09/16
文書を印刷する
対象製品
ActiveReports for .NET 7.0J
詳細
セクションレポートを実際にプリンタに印刷する場合、そのプリンタドライバが、そのレポートに設定した用紙サイズをサポートしている必要がありますが、プリンタドライバがサポートしている用紙サイズは、プリンタによって異なります。

セクションレポートの用紙サイズとして設定できる用紙サイズの一覧(プリンタドライバがサポートしている用紙サイズの一覧)は、下記のようにPaperSizesプロパティを使用することで参照可能です。

◆サンプルコード(VB.NET)
Dim rpt As New SectionReport1()

For Each ps As System.Drawing.Printing.PaperSize In rpt.Document.Printer.PaperSizes
  Console.Write(ps.Kind.ToString() + ", ")
  Console.Write(ps.PaperName.ToString() + ", ")
  Console.Write(ps.Height.ToString() + ", ")
  Console.WriteLine(ps.Width.ToString())
Next

◆サンプルコード(C#)
SectionReport1 rpt = new SectionReport1();

foreach (System.Drawing.Printing.PaperSize ps in rpt.Document.Printer.PaperSizes)
{
  Console.Write(ps.Kind.ToString() + ", ");
  Console.Write(ps.PaperName.ToString() + ", ");
  Console.Write(ps.Height.ToString() + ", ");
  Console.WriteLine(ps.Width.ToString());
}

しかしながら、プリンタドライバにあらかじめ登録されていない用紙サイズで、セクションレポートを生成・印刷したい場合もあります。

この場合、「サーバーのプロパティ(プリント サーバー プロパティ)」やプリンタドライバの機能を使用して、任意の用紙サイズをあらかじめ登録しておき、それを使用する方法が有効です。

■補足:ユーザー定義サイズについて
任意の用紙サイズを使用したい場合、製品ヘルプの以下のトピックにあります「ユーザー定義サイズ」を適用する方法も有効です。

ActiveReportsユーザーガイド
 - よくある質問
  - セクションレポート
   - 印刷
    - 「用紙サイズ(ユーザー定義のサイズ)を変更する」

しかしながら、この方法はプリンタドライバ上の用紙サイズ情報を動的に変更(削除・追加)する方法であるため、同一環境上で2つ以上のユーザー定義サイズを使用する場合や、ユーザー定義サイズに設定したレポートを同一環境上で同時に複数実行する場合には適用できません。(用紙サイズに対する競合が生じるため。)

上記のようなケースでは、レポートの用紙サイズを"ユーザー定義サイズ"に設定せず、あらかじめ登録しておいた用紙サイズを使用してください。


たとえば、「プリント サーバー プロパティ」等から追加した用紙サイズが、PaperSizesコレクションのインデックス"10"に定義されている場合、下記のようなコードで設定します。

◆サンプルコード(VB.NET)
Dim rpt As New SectionReport1()

rpt.PageSettings.PaperKind = rpt.Document.Printer.PaperSizes(10).Kind
rpt.PageSettings.PaperName = rpt.Document.Printer.PaperSizes(10).PaperName

rpt.Run(False)

◆サンプルコード(C#)
SectionReport1 rpt = new SectionReport1();

rpt.PageSettings.PaperKind = rpt.Document.Printer.PaperSizes[10].Kind;
rpt.PageSettings.PaperName = rpt.Document.Printer.PaperSizes[10].PaperName;

rpt.Run(false);

用紙サイズのインデックスは、プリンタドライバによって異なります。上記のように適用したい用紙サイズをインデックスで指定することが困難な場合には、以下のように用紙名で用紙サイズを検索し、適用してください。

◆サンプルコード(VB.NET)
Dim rpt As New SectionReport1

' 参照するプリンタ名を指定します。
' ※指定しない場合、当該実行環境上のデフォルトプリンタを参照します。

rpt.Document.Printer.PrinterName = "Printer Name"

' プリンタがサポートしている用紙サイズから使用したい用紙サイズの
' 情報を取得し、レポートに適用します。

For Each ps As Printing.PaperSize In rpt.Document.Printer.PaperSizes
  If ps.PaperName = "Paper Name" Then
    rpt.PageSettings.PaperKind = ps.Kind
    rpt.PageSettings.PaperName = ps.PaperName
    Exit For
  End If
Next

' レポートを生成します。
rpt.Run(False)

◆サンプルコード(C#)
SectionReport1 rpt = new SectionReport1();

// 参照するプリンタ名を指定します。
// ※指定しない場合、当該実行環境上のデフォルトプリンタを参照します。

rpt.Document.Printer.PrinterName = "Printer Name";

// プリンタがサポートしている用紙サイズから使用したい用紙サイズの
// 情報を取得し、レポートに適用します。

foreach (System.Drawing.Printing.PaperSize ps in rpt.Document.Printer.PaperSizes)
{
  if (ps.PaperName == "Paper Name")
  {
    rpt.PageSettings.PaperKind = ps.Kind;
    rpt.PageSettings.PaperName = ps.PaperName;
    break;
  }
}

// レポートを生成します。
rpt.Run(false);

なお、上記のようにプリンタドライバがサポートしている用紙サイズ一覧から、セクションレポートの用紙サイズを設定する場合、PageSettings.PaperHeightやPageSettings.PaperWidthプロパティは設定しないでください。これらのプロパティを設定すると、PaperNameプロパティ等の設定を無視し、"ユーザー定義サイズ"としてレポートが生成されるためです。

また、すべてのプリンタについて「プリント サーバー プロパティ」から登録した用紙サイズが使用できるとは限りません。プリンタドライバに任意の用紙サイズを登録する方法については、プリンタのマニュアルを参照してください。

製品ヘルプの以下のトピックもあわせてご参照ください。

ActiveReportsユーザーガイド
 - よくある質問
  - セクションレポート
   - 印刷
    - 「用紙サイズ(ユーザー定義のサイズ)を変更する」
    - 「ActiveReportsで使用可能な用紙サイズを取得する」
関連情報
キーワード
HowTo 印刷・プレビュー