标签打印机在大批量作业中开始打印空白页面

11

我遇到了一个非常奇怪的问题,我的一个用户报告说:在某个特定点之后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对象打印的点大致相同。但它没有。

我还能寻找什么?


2
嗨,@Ajay2707。感谢你的编辑,但你修改了不应该修改的特定部分。例如,CrystalReportViewer是在Visual Studio中被引用为对象;单词之间不应有空格。除此之外,缩略语是我个人的风格,与改进无关。 - fbueckert
请问您的问题有更新吗?如果有,请在回答中加粗标题文本“更新的答案”,就像其他人所做的那样。同时,最好附上图片并说明报告中的数据源。这可能有助于更好地理解问题。请尽快回复,我要赶紧回家了。 - Ajay2707
@user2366842 在最新的测试中,我一直保持打印机的“查看正在打印的内容”窗口打开。从我所看到的情况来看,打印池正在像它应该做的那样向打印机提供页面;它会在开始时给出几页,然后在打印一页后再提供另一页。在我看来,这是正确的,所以我唯一能想到的就是CRV对象与这个特定打印机的交互。 - fbueckert
这个问题有任何更新或进展吗? - Karlta05
@Karlta05 关于诊断,实际上没有。解决方法似乎还在持续中,我还没有时间深入挖掘。 - fbueckert
显示剩余16条评论
1个回答

1
对于这个问题,我有一些想法导致打印时出现了这种行为。
  1. 可能是标签的长度超过了页面大小的宽度问题。因此,您可以检查所有标签和页面在缩小标签宽度时是否为空(即使标签未正确显示,我们也可以单独处理)。如果它没有显示(如当前您正在获取的),那么您只需将“可增长”选项设置为所有标签的真实值即可处理标签宽度。
  2. 如果一切正常,那么我认为您可以检查打印机的页面设置/边距。
  3. 如果以上方法都不起作用,则可以创建新报告或现有报告,仅添加静态标签和值,然后首先预览,然后从代码中调用。通过这种方式,您可以找到一些解决方案。
根据我的经验(在这种情况下我可能会错),当您的列增加时,水晶报表中出现空白页时,报表的宽度会出现问题。因此,要么减少报表宽度,要么将打印机页面设置得更大。这样就可以打印,否则不会抛出错误,但会产生空白页。

2
这绝对不是页面大小或边距的问题;如果是,标签将在每个作业中都打印错误。它不会显示这些症状。 - fbueckert
这个标签报告上有页码吗?这将使得在第100页时,3位数字溢出会持续显示此行为。 - Jim Lutz
配置打印队列以保留作业,然后检查打印池文件,您就可以确定它是否无法正确呈现或者打印机/驱动程序是否出现故障。 - Terry Carmen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接