我遇到了一个非常奇怪的问题,我的一个用户报告说:在某个特定点之后Crystal Reports报表打印空白页面。我的故障排除已经在一定程度上缩小了罪犯范围,但同时也显示了一些不一致的结果。
具体情况如下:
- 应用程序是一个使用.NET 4的VB.NET应用程序。
- 解决方案中嵌入了多个Crystal Report报表,并使用单个窗体来显示和打印任何报表。
- 后端代码处理要显示的报表,并将其分配给窗体的CrystalReportViewer对象,在显示窗体前进行赋值。
- 对于出现问题的报表,数据源来自在代码中运行的SQL查询,然后将其分配为报表的数据源,再将报表分配为窗体的CRV对象的报表源。
- 标签打印机通过USB连接到有问题的计算机上,使用安装程序提供驱动程序。
- 如果有必要,它是Citizen CLP-7201e标签打印机。
分配数据源给报表的代码如下:
myCommand = New SqlClient.SqlCommand(strSQL, conPlanning)
myCommand.ExecuteNonQuery()
Da = New SqlClient.SqlDataAdapter(myCommand)
Da.Fill(dsData, "TempPrintLabels")
rptPrintLabels.SetDataSource(dsData.Tables(0))
rptPrintLabels.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait
frmReports.rptViewer.ReportSource = rptPrintLabels
frmReports.Show()
strSQL
是一个基本的SQL语句,用于根据特定表单选择报表。报表的SQL查询语句为SELECT * FROM TempPrintLabels
。
这是基本信息。当报表超过100个标签时,如果在95-120标签范围内,就会出现奇怪的情况。问题似乎不是固定的。到达某个点后,报告将停止打印。此时,剩余页面都将是空白页,数量与应该有的相同。如果您从空白开始重新启动作业,则正常打印。
当我在CrystalReportViewer中查看此报告时,它看起来很好;所有标签都可以正确呈现。当我将其打印到PDF或文本文件打印机时,所有页面都在那里。因此,对我来说,报告和打印生成似乎正在工作。
我认为是打印机的问题。为了测试它,我将185页的作业打印到PDF,然后将其打印到打印机上。那完全可以打印出来。
我无法解释这个问题,甚至无法进一步诊断它。表单中没有打印代码;它使用CrystalReportViewer对象处理所有内容。如果是这个CRV对象的问题,打印到PDF应该给我空白页。但它没有。如果是打印机的问题,应该从PDF开始打印就出现空白页面,与直接从CRV对象打印的点大致相同。但它没有。
我还能寻找什么?