セクションレポートの実行時、プリンタが用紙サイズをサポートしていないというエラーが発生します
対象製品
ActiveReports for .NET 7.0J
詳細
セクションレポートを実行した時、実行する環境によって、以下のようなエラーが発生する場合があります。
セクションレポートの場合、レポート生成時や、デザイン画面上で「レポートの設定」ダイアログを表示したときに、その環境のプリンタドライバから用紙サイズなどの情報を取得します。その際に参照するプリンタは、(特に指定しない限り)その環境上で「通常使うプリンタ(デフォルトプリンタ)」に指定されているプリンタです。
たとえば、開発環境と実行環境とで、インストールされているプリンタドライバやその設定が異なる場合、またはデザイン時に設定した用紙サイズがレポートを実行した環境上のプリンタでサポートされていない場合、レポート生成時にエラーが発生することがあります。
また、デザイン時にレポートに設定した規定の用紙サイズが、別の実行環境上のプリンタでサポートされていても、規定サイズではなくユーザー定義サイズとしてサポートされていると、同様のエラーが発生します。
たとえば、.NET Framework標準のPropertyGridコントロールを使用し、下記のコードを実行することで、「通常使うプリンタ」がサポートしている用紙サイズを確認できます。(フォーム上にあらかじめPropertyGridコントロールが配置しておいてください。)
◆サンプルコード(VB.NET)
◆サンプルコード(C#)
このコードを実行し、PropertyGrid上の「PaperSizes」プロパティを展開すると、使用可能な用紙サイズ一覧が表示されます。表示される用紙サイズ一覧の内容はプリンタの機種によって異なります。また、同じ用紙サイズであっても、規定サイズとしてサポートしているプリンタと、ユーザー定義サイズとしてサポートしているプリンタがあります。以下はその一例です。
たとえば、デザイン時に[レポートの設定]ダイアログで用紙サイズをB4サイズに設定したとします。もし、このデザイン作業を行った開発環境のプリンタが上記「1.」のタイプのプリンタの場合、PaperSize.Kind=B4としてレポート内に保存されます。
しかしながら、このアプリケーションを別の実行環境で実行した時に、その環境のプリンタが上記「2.」のタイプのプリンタだった場合、そのプリンタからはPaperSize.Kind=B4という用紙サイズを取得できないため、レポートの生成時にエラーが発生します。
本現象を回避する方法としては、下記の2つの方法があります。
- プリンタは用紙サイズ ** をサポートしません。PageSettingsでPaperKind.Customを使用するか、プリンタがサポートしている用紙サイズを指定してください。
- Printer does not support ** papersize. Please use PaperKind.Custom in your PageSettings or specify a papersize supported by the current printer
セクションレポートの場合、レポート生成時や、デザイン画面上で「レポートの設定」ダイアログを表示したときに、その環境のプリンタドライバから用紙サイズなどの情報を取得します。その際に参照するプリンタは、(特に指定しない限り)その環境上で「通常使うプリンタ(デフォルトプリンタ)」に指定されているプリンタです。
たとえば、開発環境と実行環境とで、インストールされているプリンタドライバやその設定が異なる場合、またはデザイン時に設定した用紙サイズがレポートを実行した環境上のプリンタでサポートされていない場合、レポート生成時にエラーが発生することがあります。
また、デザイン時にレポートに設定した規定の用紙サイズが、別の実行環境上のプリンタでサポートされていても、規定サイズではなくユーザー定義サイズとしてサポートされていると、同様のエラーが発生します。
たとえば、.NET Framework標準のPropertyGridコントロールを使用し、下記のコードを実行することで、「通常使うプリンタ」がサポートしている用紙サイズを確認できます。(フォーム上にあらかじめPropertyGridコントロールが配置しておいてください。)
◆サンプルコード(VB.NET)
Private Sub Form1_Load(...) Handles MyBase.Load
Dim pd As New System.Drawing.Printing.PrintDocument()
PropertyGrid1.SelectedObject = pd.PrinterSettings
End Sub
Dim pd As New System.Drawing.Printing.PrintDocument()
PropertyGrid1.SelectedObject = pd.PrinterSettings
End Sub
◆サンプルコード(C#)
private void Form2_Load(object sender, EventArgs e)
{
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
this.propertyGrid1.SelectedObject = pd.PrinterSettings;
}
{
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
this.propertyGrid1.SelectedObject = pd.PrinterSettings;
}
このコードを実行し、PropertyGrid上の「PaperSizes」プロパティを展開すると、使用可能な用紙サイズ一覧が表示されます。表示される用紙サイズ一覧の内容はプリンタの機種によって異なります。また、同じ用紙サイズであっても、規定サイズとしてサポートしているプリンタと、ユーザー定義サイズとしてサポートしているプリンタがあります。以下はその一例です。
- B4が規定サイズのプリンタ
[PaperSize B4 (JIS) Kind=B4 Height=1433 Width=1012] - B4がカスタム(ユーザー定義サイズ)扱いのプリンタ
[PaperSize B4 Kind=Custom Height=1433 Width=1012]
たとえば、デザイン時に[レポートの設定]ダイアログで用紙サイズをB4サイズに設定したとします。もし、このデザイン作業を行った開発環境のプリンタが上記「1.」のタイプのプリンタの場合、PaperSize.Kind=B4としてレポート内に保存されます。
しかしながら、このアプリケーションを別の実行環境で実行した時に、その環境のプリンタが上記「2.」のタイプのプリンタだった場合、そのプリンタからはPaperSize.Kind=B4という用紙サイズを取得できないため、レポートの生成時にエラーが発生します。
本現象を回避する方法としては、下記の2つの方法があります。
- 実行環境に、標準で用紙サイズをサポートするプリンタドライバ(開発環境で使用しているものと同じもの)をインストールし、レポート生成時にそのプリンタを参照するようにする。
- コード上で、仮想プリンタを設定し、ユーザー定義サイズで用紙サイズを指定する。
以下のコードは、極力プリンタドライバにあらかじめ登録されている用紙サイズを適用するものとし、適用できない場合のみ、仮想プリンタ機能を使用しています。
◆サンプルコード(VB.NET)
Private Sub SectionReport1_ReportStart(...) Handles MyBase.ReportStart
Dim tmpBool As Boolean = False
' B4サイズの高さと幅を予め取得します。
Dim tmpHeight As Integer = SectionReport.CmToInch(36.4) * 100
Dim tmpWidth As Integer = SectionReport.CmToInch(25.7) * 100
With Me.PageSettings
For Each Ps As System.Drawing.Printing.PaperSize In _
Me.Document.Printer.PrinterSettings.PaperSizes
If (Ps.Kind = Drawing.Printing.PaperKind.B4) Then
' B4サイズが標準サイズとして存在した場合、それを設定します。
.PaperKind = Drawing.Printing.PaperKind.B4
tmpBool = True
Exit For
End If
Next
If tmpBool = False Then
For Each Ps As System.Drawing.Printing.PaperSize In _
Me.Document.Printer.PrinterSettings.PaperSizes
If ((Ps.Height = tmpHeight) _
AndAlso (Ps.Width = tmpWidth)) Then
' 用紙サイズがB4(25.7×36.4cm)のものが存在した場合、
' その用紙サイズを設定します。
' ※プリンタによって設定されている用紙サイズが
' 異なる場合もございます。ご注意ください。
Me.Document.Printer.DefaultPageSettings.PaperSize = Ps
tmpBool = True
Exit For
End If
Next
End If
If tmpBool = False Then
For Each Ps As System.Drawing.Printing.PaperSize In _
Me.Document.Printer.PrinterSettings.PaperSizes
If (Ps.PaperName = "B4") Then
' 用紙サイズ名が"B4"のものが存在した場合、
' その用紙サイズを設定します。
' ※プリンタによって設定されている用紙名が
' 異なる場合もございます。ご注意ください。
Me.Document.Printer.DefaultPageSettings.PaperSize = Ps
tmpBool = True
Exit For
End If
Next
End If
If tmpBool = False Then
' B4サイズが標準サイズとして存在しなかった場合、
' ユーザー定義サイズとして設定します。
' 仮想プリンタを設定します。
Me.Document.Printer.PrinterName = ""
' B4サイズを、ユーザー定義サイズで設定します。
.PaperKind = Drawing.Printing.PaperKind.Custom
.PaperHeight = tmpHeight / 100
.PaperWidth = tmpWidth / 100
End If
' 用紙方向を縦に設定します。
.Orientation = Section.PageOrientation.Portrait
End With
End Sub
◆サンプルコード(C#)
private void SectionReport1_ReportStart
(object sender, EventArgs e)
{
bool tmpBool = false;
// B4サイズの高さと幅を予め取得します。
float tmpHeight = GrapeCity.ActiveReports.SectionReport.CmToInch(36.4f) * 100;
float tmpWidth = GrapeCity.ActiveReports.SectionReport.CmToInch(25.7f) * 100;
foreach (System.Drawing.Printing.PaperSize Ps
in this.Document.Printer.PrinterSettings.PaperSizes)
{
if (Ps.Kind == System.Drawing.Printing.PaperKind.B4)
{
// B4サイズが標準サイズとして存在した場合、それを設定します。
this.PageSettings.PaperKind
= System.Drawing.Printing.PaperKind.B4;
tmpBool = true;
break;
}
}
if (tmpBool == false)
{
foreach (System.Drawing.Printing.PaperSize Ps
in this.Document.Printer.PrinterSettings.PaperSizes)
{
if ((Ps.Height == (int)tmpHeight)
&& (Ps.Width == (int)tmpWidth))
{
// 用紙サイズがB4(25.7×36.4cm)のものが
// 存在する場合、その用紙サイズを設定します。
// ※プリンタによって設定されている用紙サイズが
// 異なる場合もございます。ご注意ください。
this.Document.Printer.DefaultPageSettings
.PaperSize = Ps;
tmpBool = true;
break;
}
}
}
if (tmpBool == false)
{
foreach (System.Drawing.Printing.PaperSize Ps
in this.Document.Printer.PrinterSettings.PaperSizes)
{
if (Ps.PaperName == "B4")
{
// 用紙サイズ名が"B4"のものが存在する場合、
// その用紙サイズを設定します。
// ※プリンタによって設定されている用紙名が
// 異なる場合もございます。ご注意ください。
this.Document.Printer.DefaultPageSettings
.PaperSize = Ps;
tmpBool = true;
break;
}
}
}
if (tmpBool == false)
{
// B4サイズが標準サイズとして存在しなかった場合、
// ユーザー定義サイズとして設定します。
// 仮想プリンタを設定します。
this.Document.Printer.PrinterName = "";
// B4サイズを、ユーザー定義サイズで設定します。
this.PageSettings.PaperKind
= System.Drawing.Printing.PaperKind.Custom;
this.PageSettings.PaperHeight = tmpHeight / 100;
this.PageSettings.PaperWidth = tmpWidth / 100;
}
// 用紙方向を縦に設定します。
this.PageSettings.Orientation
= GrapeCity.ActiveReports.Document.Section.PageOrientation.Portrait;
}
なお、仮想プリンタの詳細や注意事項につきましては、製品ヘルプの以下のトピックをご参照ください。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- 概念
- セクションレポートの概念
- 仮想プリンタ
- よくある質問
- 印刷
- 「プリンタドライバがサポートしていない用紙サイズに出力する」
関連情報
- 「System error number:**」というエラーが発生します
- コード上で「プリント サーバー プロパティ」等から追加した用紙サイズを取得・設定する方法は?
- アプリケーションの実行環境によって、レポートの用紙サイズが異なってしまう
- セクションレポートにおいて、用紙サイズや余白をコード上で動的に設定する方法は?
キーワード
問題 印刷・プレビュー