Several new members in Reports for WinForms were added to work around specific problems caused by printer drivers.
The following members were added to resolve issues with printer drivers:
Class | Member | Description |
---|---|---|
C1PreviewPane | AdjustPrintPage event | Fired from within the PrintPage event handler of the C1PrintManager used to print the document. |
C1PrintManager | AdjustPrintPage event | Fired from within the PrintDocument.PrintPage event handler of current print manager, prior to actually printing the page. |
C1PrintOptions | DrawPrintableAreaBounds property | Gets or sets a value indicating whether a line is drawn around the printable area of the page (useful to debug printer issues). |
PrintableAreaBoundsPen property | Gets or sets the pen used to draw printable area bounds if DrawPrintableAreaBounds is True. | |
PrintAsBitmap property | Gets or sets a value indicating whether page metafiles should be converted to bitmaps and clipped to printer's hard margins prior to printing. |
The members listed in the table above may be used to work around certain printer issues. For instance, consider the following scenario of a machine running Windows Vista 64 with an HP-CP1700 printer (using Vista's built-in printer driver). In this example, if ClipPage was False (default) and a document page was wider than the printer's hard margin, empty pages were emitted and document content was not printed. For example, the following document produced just two empty pages if printed:
To write code in Visual Basic
Visual Basic |
Copy Code
|
---|---|
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() |
To write code in C#
C# |
Copy Code
|
---|---|
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(); |
This issue can be now worked around by doing two things:
To write code in Visual Basic
Visual Basic |
Copy Code
|
---|---|
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 ' System set to 824 pa.X = 25 ' System set to 13 pa.Y = 13 ' System set to 6.666... Else pa.X = 13 pa.Y = 0 End If e.PrintableArea = pa End Sub |
To write code in C#
C# |
Copy Code
|
---|---|
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; // System set to 824 pa.X = 25; // System set to 13 pa.Y = 13; // System set to 6.666... } else { pa.X = 13; pa.Y = 0; } e.PrintableArea = pa; } |
This code fixes the wrong hard page margins set by the printer driver, and avoids the problem described above.