Developer Express WinForms .NET 控件提供的 ExportTo....、 Print 和 ShowPrintPreview 方法提供了基本的打印和导出功能。 这些方法不允许你定制纸张格式和方向,也不允许把自定义信息添加到报告中。
本示例展示了如何突破这些限制,演示了另一种打印/导出某个控件的方法 —— 直接使用 XtraPrinting 库。 使用这种方法,可以:
- 把附加信息添加到报告中;
- 添加报表标头;
- 指定页眉或页脚;
- 指定纸张大小、边距、方向等。
这种方法适用于所有 Developer Express WinForms .NET 控件 —— XtraGrid、XtraPivotGrid、XtraScheduler、XtraTreeList、 XtraCharts、XtraLayoutControl、XtraVerticalGrid 和 XtraGauges。
打印/导出一个控件并定制打印/导出选项的基本步骤是:
- 把一个 PrintingSystem 组件添加到窗体中。
- 把一个 PrintableComponentLink 对象添加到 PrintingSystem.Links 集合中。
- 把必须被打印/导出的控件指派到 PrintableComponentLinkBase.Component 属性。
- 如果必须定制纸张设置,那么把 Link 对象的 LinkBase.PaperKind、LinkBase.Margins 和/或 LinkBase.Landscape 属性设置为所需要的值。
- 如果自定义信息必须被添加到报告中,那么接管 Link 对象的相应事件。 例如, LinkBase.CreateReportHeaderArea 事件允许报告标头被创建。
- 调用 Link 对象的 Link.CreateDocument 方法。
- 要打印报告,则调用 Link 对象的 Link.Print 方法。
- 要显示打印预览窗口,则调用 Link 对象的 Link.ShowPreview 方法。
- 要以特定格式导出报告,则调用相应的 ExportTo... 方法(由 PrintingSystem 组件提供)。
下面的示例提供了关于如何打印/导出一个 GridControl、添加报告标头和设置纸张格式的逐步骤的操作指令。 示例 GridControl 的结果报告显示如下:
假设已经有一个显示客户信息的 GridControl 位于窗体内。
在设计时刻定制打印选项
本小节展示如何在设计时刻创建一个报告,并添加一个报告标头。
-
把 PrintingSystem 组件添加到窗体中。 这个组件将出现在窗体设计器的底部面板中。
-
确保 PrintingSystem1 组件已经被选中。 打开“属性”窗口 (快捷方式是 F4 键),列出这个组件的设置。
单击 Links 属性的省略号按钮。 这将打开一个 Link Collection Editor(Link 集合编辑器):
添加 Add(添加) 按钮,并在下拉菜单中选择 DevExpress.XtraPrinting.PrintableComponentLink 项:
这会在 Link 集合中创建一个 PrintableComponentLink 对象。
实现了 IPrintable 接口的 PrintableComponentLink 对象可以被用于打印控件 (参阅 IPrintable 接口)。
由 Link 对象提供的这些属性和事件,允许你对报告进行定制 (指定纸张大小、边距、纸张方向、页眉和页脚的格式、报告标头等)。
请参阅 XtraPrinting 库的文档来获得更多信息。
-
把焦点移到 Link 对象的 Component 属性,并打开下拉表。 这会列出可以使用当前 Link 进行打印的所有控件。 从下拉表中选中这个网格控件。
-
要设置纸张格式,则使用 Link 对象的 LinkBase.PaperKind 属性:
-
要创建一个报告标头,则在“属性”网格中切换到“事件”页面,并且通过双击相应的编辑框来订阅 CreateReportHeader 事件:
单击 OK 按钮来关闭设计器,并编写已经生成的 CreateReportHeader 事件处理程序,如下所示:
C# | 复制代码 |
---|
using System.Drawing;
using DevExpress.XtraPrinting;
private void printableComponentLink1_CreateReportHeaderArea(object sender,
CreateAreaEventArgs e) {
string reportHeader = "Customers Report";
e.Graph.StringFormat = new BrickStringFormat(StringAlignment.Center);
e.Graph.Font = new Font("Tahoma", 14, FontStyle.Bold);
RectangleF rec = new RectangleF(0, 0, e.Graph.ClientPageSize.Width, 50);
e.Graph.DrawString(reportHeader, Color.Black, rec, BorderSide.None);
}
|
Visual Basic | 复制代码 |
---|
Imports System.Drawing
Imports DevExpress.XtraPrinting
Private Sub PrintableComponentLink1_CreateReportHeaderArea(ByVal sender As System.Object, _
ByVal e As CreateAreaEventArgs) _
Handles PrintableComponentLink1.CreateReportHeaderArea
Dim reportHeader As String = "Customers Report"
e.Graph.StringFormat = New BrickStringFormat(StringAlignment.Center)
e.Graph.Font = New Font("Tahoma", 14, FontStyle.Bold)
Dim rec As RectangleF = New RectangleF(0, 0, e.Graph.ClientPageSize.Width, 50)
e.Graph.DrawString(reportHeader, Color.Black, rec, BorderSide.None)
End Sub
|
-
要通过所创建的 Link 对象来显示控件的打印预览,则使用下列代码:
C# | 复制代码 |
---|
printableComponentLink1.CreateDocument();
printableComponentLink1.ShowPreview();
|
Visual Basic | 复制代码 |
---|
PrintableComponentLink1.CreateDocument()
PrintableComponentLink1.ShowPreview()
|
要打印报告而不显示预览,则使用 Link.Print 方法,而不是 Link.ShowPreview 方法。
下面的插图举例说明了使用所编写代码生成的 XtraGrid 控件的示例报告:
-
要通过 PrintingSystem 导出控件,则使用 PrintingSystem 组件的 ExportTo... 方法。 例如, PrintingSystemBase.ExportToPdf 方法把当前报告保存为 PDF 文件。
C# | 复制代码 |
---|
printableComponentLink1.CreateDocument();
printableComponentLink1.PrintingSystem.ExportToPdf(@"c:\gridcontrol.pdf");
|
Visual Basic | 复制代码 |
---|
PrintableComponentLink1.CreateDocument()
PrintableComponentLink1.PrintingSystem.ExportToPDF("c:\gridcontrol.pdf")
|
注意,预览 窗口让最终用户可以把报告保存为多种格式。 最终用户可以使用 预览 窗口中的 Export Document(导出文档)... 按钮来导出当前文档。 请参阅 使用 XtraPrinting 库,将控件以不同格式(PDF、HTML、BMP 等)导出 主题获得更多信息。
在运行时刻生成报告标头
下列代码可以用于在运行时刻创建一个报告:
C# | 复制代码 |
---|
using System.Drawing;
using DevExpress.XtraPrinting;
PrintingSystem ps = new PrintingSystem();
PrintableComponentLink link = new PrintableComponentLink(ps);
link.Component = customersGridControl;
link.PaperKind = System.Drawing.Printing.PaperKind.A4;
link.CreateReportHeaderArea +=
new CreateAreaEventHandler(printableComponentLink1_CreateReportHeaderArea);
link.CreateDocument();
link.ShowPreview();
private void printableComponentLink1_CreateReportHeaderArea(object sender,
CreateAreaEventArgs e) {
string reportHeader = "Customers Report";
e.Graph.StringFormat = new BrickStringFormat(StringAlignment.Center);
e.Graph.Font = new Font("Tahoma", 14, FontStyle.Bold);
RectangleF rec = new RectangleF(0, 0, e.Graph.ClientPageSize.Width, 50);
e.Graph.DrawString(reportHeader, Color.Black, rec, BorderSide.None);
}
|
Visual Basic | 复制代码 |
---|
Imports System.Drawing
Imports DevExpress.XtraPrinting
' Create a PrintingSystem component.
Dim ps As New PrintingSystem()
' Create a link that will print a control.
Dim link As New PrintableComponentLink(ps)
' Specify the control to be printed.
link.Component = CustomersGridControl
' Set the paper format.
link.PaperKind = System.Drawing.Printing.PaperKind.A4
' Subscribe to the CreateReportHeaderArea event used to generate the report header.
AddHandler link.CreateReportHeaderArea, AddressOf PrintableComponentLink1_CreateReportHeaderArea
' Generate the report.
link.CreateDocument()
' Show the report.
link.ShowPreview()
' Remove comments below to export the report to a PDF file
' link.PrintingSystem.ExportToPdf("c:\gridcontrol.pdf")
'...
Private Sub PrintableComponentLink1_CreateReportHeaderArea(ByVal sender As System.Object, _
ByVal e As CreateAreaEventArgs)
Dim reportHeader As String = "Customers Report"
e.Graph.StringFormat = New BrickStringFormat(StringAlignment.Center)
e.Graph.Font = New Font("Tahoma", 14, FontStyle.Bold)
Dim rec As RectangleF = New RectangleF(0, 0, e.Graph.ClientPageSize.Width, 50)
e.Graph.DrawString(reportHeader, Color.Black, rec, BorderSide.None)
End Sub
|
参阅