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 を実行するマシンの以下のシナリオについて検討します。この例では、ClipPage が False(デフォルト)に設定され、ドキュメントのページがプリンタのマージンより広く、空のページが出力され、ドキュメントのコンテンツは印刷されませんでした。たとえば、以下のドキュメントは、印刷を実行したときに、空の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つの方法によって対処できるようになりました。
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 に設定されます。 |
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; } |
このコードは、プリンタドライバによって設定された、間違ったハードページマージンを修正し、上記の問題を回避します。