Page tree
Skip to end of metadata
Go to start of metadata

向C1PrintDocument导入C1Report将具有以下限制:
只有包含在XML文件中的报表定义可以被正常导入。也就是说,如果一个应用程序通过添加到C1Report事件处理器的C#或者VB.NET代码产生报表,该报表无法被导入到C1PrintDocument。
C1Report中,如果没有安装打印机,同时CustomWidth和CustomHeight均设置为0,则纸张尺寸始终设置为
Letter(8.5in×11in)。而在C1PrintDocument中,纸张的尺寸将根据当前的区域设置决定,对于大多数的欧洲国家,纸张尺寸将被设置为A4(210cm×297cm)。
脚本限制:
C1PrintDocument:
Font属性为只读属性。
Field:
Section属性为只读。
Font属性为只读。
LineSpacing属性不存在。
Field.Subreport属性为只读。
如果LinkTarget属性包含一个表达式,则不会进行计算,仅使用其字面值。
SubreportHasData属性不存在。
LinkValue属性不存在。
Layout:
不支持ColumnLayout属性,column始终按照从上到下,从左到右的方式排布。
LabelSpacingX属性不存在。 LabelSpacingY属性不存在。
OverlayReplacements属性不存在。
在OnFormat的事件处理程序中,影响文档分页的属性不应被修改。例如,不能使用ForcePageBreak。
输入报表参数的对话框将不显示,做为替代,使用默认值。如果默认值尚未指定,则按照参数的类型确定,例如,0用作数值类型,空白字符串用作字符串类型,当前日期用作日期类型,等等。
数据库字段无法在页眉和页脚处使用。
C1Report中,多列报表的报表页眉将跨过全部的列显示;而在C1PrintDocument中,它仅仅跨过第一列。
无法跨列显示。
和不同的打印机驱动协调工作
!MISSING PHRASE 'Show All'!
!MISSING PHRASE 'Hide All'!
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;
}

该代码修正了由打印机驱动设置的错误的硬分页边距,防止以上提到的错误。
报表描述语言(RDL)文件
!MISSING PHRASE 'Show All'! !MISSING PHRASE 'Hide All'!
C1PrintDocument支持导入RDL文件。报表描述语言(RDL)导入功能允许读取RDL报表定义至一个C1PrintDocument组件的实例。导入的结果是一个导入文档的一个数据绑定呈现文档。C1PrintDocument中的RDL支持基于 Microsoft RDL
Specification for SQL Server 2008.

注意:C1PrintDocument上提供的RDL导入功能(由ImportRdl以及FromRdl方法提供)现已废弃。请使用
C1RdlReport。更多信息请参见 Working with C1RdlReport.

您可以使用以下代码导入一个RDL文件:
Visual Basic

Visual Basic

Dim doc As New C1PrintDocument() doc.ImportRdl("myReport.rdl") doc.Generate()

C#

C#

C1PrintDocument doc = new C1PrintDocument(); doc.ImportRdl("myReport.rdl"); doc.Generate();

请注意并不是全部的RDL属性都被支持,但是我们将在未来的发布中逐渐完善支持的属性范围。更多信息,请参见 RDL
Import Limitations.
RDL导入限制
Reportsfor WinFroms的目前版本中对RDL导入的实现存在一些限制。这些限制包括:
不支持Gauge,Chart,以及SubReport对象。 表达式不支持复杂的RDL属性的子属性(比如边框宽度)。 大多数的RDL汇总功能具有可选的"recursive"参数,目前不支持此参数。
尚未完全支持的RDL属性:
QueryParameter.Value:仅能指定一个字面值。
ReportParameter:参数数据引用不支持。
Hyperlink:无法指定一个表达式;如果多个动作关联到同一个超链接,则仅仅第一个动作将会被执行。
ReportItem.Visibility:无法指定为一个表达式。
ReportItem.Bookmark:无法指定为一个表达式。 Style.TextAlign.General:仅支持靠左对齐。
以下RDL属性目前不支持:
Document.AutoRefresh
Document.CustomProperties
Document.Code
Document.Width
Document.Language
Document.CodeModules
Document.Classes
Document.ConsumeContainerWhitespace
Document.DataTransform
Document.DataSchema
Document.DataElementName
Document.DataElementStyle
ConnectionProperties.Prompt
ConnectionProperties.DataProvider
DataSet.CaseSensitivity
DataSet.Collation
DataSet.AccentSensitivity
DataSet.KanatypeSensitivity
DataSet.WidthSensitivity
DataSet.InterpretSubtotalsAsDetails
Body.Height
ReportItem.ToolTip
ReportItem.DocumentMapLabel
ReportItem.CustomProperties
ReportItem.DataElementName
ReportItem.DataElementOutput
TextBox.HideDuplicates
TextBox.ToggleImage
TextBox.UserSort
TextBox.DataElementStyle
TextBox.ListStyle
TextBox.ListLevel
TextRun.ToolTip
TextRun.MarkupType
Style.Format
Style.LineHeight
Style.Direction
Style.Language
Style.Calendar
Style.NumeralVariant
Style.TextEffect

注意:C1PrintDocument上提供的RDL导入功能(由ImportRdl以及FromRdl方法提供)现已废弃。请使用 C1RdlReport。更多信息请参见Working with C1RdlReport

  • No labels