使用C1PrintDocument控件 > C1Report定义 > 和不同的打印机驱动协调工作 |
ComponentOneReportsforWinForms添加了若干新的成员,用来绕过不同打印机驱动的特定问题。
添加了以下成员以解决打印机驱动问题:
类 | 成员 | 描述 |
---|---|---|
C1PreviewPane | AdjustPrintPage event | 从C1PrintManager的PrintPage事件处理函数内部触发,用作打印文档。 |
C1PrintManager | AdjustPrintPage 事件 | 从当前的print manager的PrintDocument.PrintPage事件处理函数内部,当实际打印一个页面之前触发该事件。 |
C1PrintOptions | DrawPrintableAreaBounds 属性 | 获取或设置一个值,该值表示否是在当前页的可打印区域绘制一条线框(在Debug打印机问题时非常有用)。 |
PrintableAreaBoundsPen 属性 | 获取或设置当DrawPrintableAreaBounds属性设置为True时,用做绘制打印区域边界的画笔对象。 | |
PrintAsBitmap 属性 | 获取或设置一个值,该值表示在开始打印之前,是否一个页面的元数据应当转换为位图并按照打印机的硬边距进行裁剪。 |
上表中列举的成员可以被用来绕过特定的打印机问题。例如,假设以下场景,我们有一台运行着64位Windows Vista的机器,连接着一台HP-CP1700型号的打印机(使用Vista的内置打印驱动)。在这种情况下,如果ClipPage设置为False(默认值),同时一个文档的页的宽度超出了打印机的硬边距,将会产生空白页,同时文档内容不能被打印。例如,以下代码将仅产生两个空白的打印页:
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(); |
该问题可以通过以下两步绕过:
1. 设置PrintAsBitmap属性为True(例如,在C1PreviewPane上)。
2. 添加以下事件处理代码至AdjustPrintPage事件(同样位于C1PreviewPane上):
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 ' 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 |
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; // 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; } |
该代码修正了由打印机驱动设置的错误的硬分页边距,防止以上提到的错误。