ReportViewer for ASP.NET Web Forms
プリンタドライバでの作業
C1PrintDocument の使い方 > C1Report 定義 > プリンタドライバでの作業

Reports for WinForms の 2009 v1 では、プリンタドライバに起因する特定の問題に対処するために、いくつかの新しいメンバが追加されました。

プリンタドライバの問題を解決するために、以下のメンバが追加されました。

クラス メンバ 説明
C1PreviewPane AdjustPrintPage イベント ドキュメントの印刷に使用する C1PrintManager の PrintPage イベントハンドラから発生します。
C1PrintManager AdjustPrintPage イベント 実際にページを印刷する前の、現在のプリントマネージャの PrintDocument.PrintPage イベントハンドラから発生します。
C1PrintOptions DrawPrintableAreaBounds プロパティ ページの印刷可能領域の周囲に線を表示するかどうかを指定する値を取得または設定します(プリンタの問題のデバッグに便利です)。
PrintableAreaBoundsPen プロパティ DrawPrintableAreaBounds が True の場合、印刷可能領域の枠線を表示するために使用するペンを取得または設定します。
PrintAsBitmap プロパティ 印刷前に、ページのメタファイルをビットマップに変換し、プリンタのハードマージンにクリップするかどうかを指定する値を取得または設定します。

上記のテーブルに示されたメンバは、特定のプリンタの問題に対処するために使用できます。たとえば、HP-CP1700 プリンタ(Vista の組み込みプリンタドライバを使用)を装備した Windows Vista 64 を実行するマシンの以下のシナリオについて検討します。この例では、ClipPageFalse(デフォルト)に設定され、ドキュメントのページがプリンタのマージンより広く、空のページが出力され、ドキュメントのコンテンツは印刷されませんでした。たとえば、以下のドキュメントは、印刷を実行したときに、空の2ページのみ生成しました。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Dim doc As New C1PrintDocument()
doc.Style.Font = New Font("Arial", 32)
For i As Integer = 0 To 19
Dim rtx As New RenderText(i.ToString())
rtx.X = String.Format("{0}in", i)
rtx.Y = "10cm"
rtx.Style.FontSize = 64
doc.Body.Children.Add(rtx)
Next
doc.Generate()

C# コードの書き方

C#
コードのコピー
C1PrintDocument doc = new C1PrintDocument();
doc.Style.Font = new Font("Arial", 32);
for (int i = 0; i < 20; ++i)
{
RenderText rtx = new RenderText(i.ToString());
rtx.X = string.Format("{0}in", i);
rtx.Y = "10cm";
rtx.Style.FontSize = 64;
doc.Body.Children.Add(rtx);
}
doc.Generate();

この問題は、以下の2つの方法によって対処できるようになりました。

  1. PrintAsBitmap を True に設定します(たとえば、C1PreviewPane 上で).
  2. 以下のイベントハンドラをAdjustPrintPage イベントに関連付けます(AdjustPrintPage 経由でも可能です)。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim doc As New C1PrintDocument()
    doc.Style.Font = New Font("Arial", 32)
    Private Sub PreviewPane_AdjustPrintPage(ByVal sender As Object, ByVal e As AdjustPrintPageEventArgs)
    Dim pa As RectangleF = e.PrintableArea
    If Not e.PrintPageEventArgs.PageSettings.Landscape Then
    pa.Width = 800 ' システムは 824 に設定されます。
    pa.X = 25 ' システムは 13 に設定されます。
    pa.Y = 13 'システムは 6.666... に設定されます。
    Else pa.X = 13 pa.Y = 0 End If e.PrintableArea = pa End Sub

    C# コードの書き方

    C#
    コードのコピー
    C1PrintDocument doc = new C1PrintDocument();
    doc.Style.Font = new Font("Arial", 32);
    void PreviewPane_AdjustPrintPage(object sender, AdjustPrintPageEventArgs e)
    {
    RectangleF pa = e.PrintableArea;
    if (!e.PrintPageEventArgs.PageSettings.Landscape)
    {
    pa.Width = 800; // システムは 824 に設定されます。
    pa.X = 25; // システムは 13 に設定されます。
    pa.Y = 13; // システムは 6.666... に設定されます。
    }
    else {
    pa.X = 13;
    pa.Y = 0;
    }
    e.PrintableArea = pa;
    }
    

このコードは、プリンタドライバによって設定された、間違ったハードページマージンを修正し、上記の問題を回避します。