実行環境で「プリンタは用紙サイズ ** をサポートしません。PageSettingsでPaperKind.Customを使用するか、プリンタがサポートしている用紙サイズを指定してください。」というエラーが発生します。

文書番号 : 27232     文書種別 : 使用方法     最終更新日 : 2012/10/05
文書を印刷する
対象製品
ActiveReports for .NET 6.0J Professional
詳細
ActiveReportsは、レポート生成時や、デザイン画面上で「レポートの設定」ダイアログを表示したときに、その環境のプリンタドライバから用紙サイズ等の情報を取得します。その際に参照されるプリンタは、(特に指定しない限り)その環境上で「通常使うプリンタ」に指定されているものです。
たとえば、開発環境と実行環境とで、インストールされているプリンタドライバやその設定が異なる場合や、実行環境上のプリンタでその用紙サイズがサポートされていない場合には、レポート生成時にエラーが発生することがあります。

また、設計時に指定した規定の用紙サイズが実行環境上のプリンタでサポートされていても、規定サイズではなくユーザー定義サイズとしてサポートされていると、同様のエラーが発生します。
たとえば、.NET Framework標準のPropertyGridコントロールを使用し、下記のコードを実行することで、「通常使うプリンタ」がサポートしている用紙サイズを確認できます。

◆サンプルコード(VB.NET)
' Form上に"PropertyGrid"コントロールを配置しておきます。
Private Sub Form1_Load(...)
  Dim pd As New System.Drawing.Printing.PrintDocument()
  PropertyGrid1.SelectedObject = pd.PrinterSettings
End Sub

このコードを実行し、PropertyGrid上の「PaperSizes」プロパティのセルボタンをクリックすると、使用可能な用紙サイズ一覧が表示されます。表示される用紙サイズ一覧の内容はプリンタの機種によって異なります。また、同じ用紙サイズであっても、規定サイズとしてサポートしているプリンタと、ユーザー定義サイズとしてサポートしているプリンタがあります。以下はその一例です。

(1)B4が標準サイズのプリンタ
[PaperSize B4 (JIS) Kind=B4 Height=1433 Width=1012]

(2)B4がカスタム(ユーザー定義サイズ)扱いのプリンタ
[PaperSize B4 Kind=Custom Height=1433 Width=1012]

上記のように、同じB4サイズであってもプリンタによって PaperSize.Kind の値が異なる場合がございます。

例えば、デザイン時に[レポートの設定]ダイアログで用紙サイズをB4サイズに設定したとします。もし、このデザイン作業を行った開発環境のプリンタが(1)のタイプのプリンタの場合、PaperSize.Kind=B4としてアプリケーション内に保存されます。
このアプリケーションを別の実行環境で実行した時に、当該環境のプリンタが(2)のタイプだった場合、そのプリンタからはPaperSize.Kind=B4という用紙サイズを取得できないため、レポートの生成時にエラーが発生します。

本現象を回避する方法としては、下記の2つの方法がございます。こちらの方法をお試しください。

  1. 実行環境に、標準で用紙サイズをサポートするプリンタドライバ(開発環境で使用しているものと同じもの)をインストールし、レポート生成時にそのプリンタを使用する。


  2. コード上で、仮想プリンタを設定し、ユーザー定義サイズで用紙サイズを指定する。

    ◆サンプルコード(VB.NET)
    Private Sub NewActiveReport1_ReportStart(...) Handles MyBase.ReportStart
      Dim tmpBool As Boolean = False

      ' B4サイズの高さと幅を予め取得します。
      Dim tmpHeight As Integer = ActiveReport.CmToInch(36.4) * 100
      Dim tmpWidth As Integer = ActiveReport.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 = PageOrientation.Portrait
      End With

    End Sub

    ◆サンプルコード(C#)
    private void NewActiveReport1_ReportStart
      (object sender, EventArgs e)
    {
      bool tmpBool = false;

      // B4サイズの高さと幅を予め取得します。
      float tmpHeight = ActiveReport.CmToInch(36.4f) * 100;
      float tmpWidth = ActiveReport.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 = PageOrientation.Portrait;
    }

    なお、仮想プリンタの詳細や注意事項等につきましては、製品ヘルプの以下のトピックをご覧ください。
    PowerTools ActiveReports for .NET 6.0J
     - ActiveReports for .NETユーザーガイド
      - ActiveReports for .NETの概要
       - アーキテクチャと概念
        - 仮想プリンタ
      - よくある質問
       - 印刷
        - プリンタドライバがサポートしていない用紙サイズに出力する
関連情報
キーワード
問題 印刷・プレビュー

この文書は、以前は次のFAQ IDで公開されていました : 11909