Label printer starts printing blank pages in large jobs
我遇到了一个非常奇怪的问题,我的一个用户正在报告:
Crystal Reports报表正在打印空白页面超过特定点。我的疑难解答已缩小了罪魁祸首的范围,但同时却显示出一些不一致的结果。
这是最低点:
-
该应用程序是使用.NET 4的VB.NET应用程序。
-
解决方案中嵌入了多个Crystal Report报表,并且使用一个表格来显示和打印任何报表。
-
通过代码后端处理要显示的报告,并在显示表单之前将其分配给表单的CrystalReportViewer对象。
-
对于问题报告,数据源来自在代码中运行的SQL查询,然后将其分配为报告的数据源,然后在表单中将报告分配为CRV对象的报告源。
-
标签打印机通过USB连接到有问题的计算机,并使用安装程序提供驱动程序。
-
如果重要的话,它是一台Citizen CLP-7201e标签打印机。
将数据源分配给报表的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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应该给我空白页。没有。如果是打印机,则应该在与从CRV对象直接打印相同的位置开始从PDF打印空白。没有。
我还能寻找什么?
- 嗨@ Ajay2707在赞赏您的编辑的同时,您正在修改不应删除的特定部分。例如,CrystalReportViewer是在Visual Studio中被引用的对象。单词之间不应有空格。除此之外,宫缩是我自己的风格,与改善无关。
-
是一种特定的报告正在显示这种消隐行为,还是在所有超过90-120个标签的Crystal Reports中都发生这种情况?
-
@ChicagoMike只有一个报告可以打印那么多标签,因此很遗憾,没有其他报告可以测试以查看是否是孤立的事件。
-
您可以创建一个执行此操作的报告吗?我知道这听起来很傻,但是如果您新创建的报告能够打印120个标签,那将是一个巨大的见解。
-
我可能会使用@ChicagoMike,但我不确定会带来什么价值。愿意分享您的假设吗?
-
因为如果您能够使用新报告来执行此操作,则意味着现有报告的结构中存在打印机无法处理的某些内容。这可能是一个漫长的过程,但是我会检查一下。如果新报告也不起作用,则表明我与Crystal Reports与该特定打印机的通信存在一些共同点,这会引起问题。由于Crystal Reports与PDF驱动程序进行了准确的对话,因此这将告诉我打印机和/或其驱动程序有故障,因此我将访问制造商的网站或与制造商联系。
-
@ChicagoMike我想我忘记提到的一件事:打印机开始打印空白页后,您可以返回报告,并在空白开始的地方开始新的打印作业,这样就可以正常打印了。由于这些都是标签,因此很难相信,当报表结构经历了20个成功的细节时,报表结构将在细节的另一次迭代中中断。就是说,我将看到我可以做的到那种程度的安排对另一份报告的测试。
-
您可以在此处将报告显示为图像,以及如何尝试打印纵向或横向?还要分配数据源是什么? xml数据源或直接ds分配给报表。如果您也共享那部分代码,那就太好了。
-
@ Ajay2707我已经在代码中添加了数据以及数据来自何处。我不确定报告图像会如何帮助您;报告中没有逻辑。只是获取字段并将其转储到报表中。
-
您更新后的问题在哪里,请使用粗体标题文本"更新后的答案"来更新您的答案,如其他操作一样。很好地附加图像以及报表中的数据源是什么。也许这将有助于您了解更多信息,并尽快给我,我迟到了
-
@ Ajay2707不,谢谢,我不会修改我的问题以包括不相关的文本,例如"编辑","更新"或类似内容。我在基本详细信息之后添加了有关数据源的其他详细信息;这是代码部分。我认为不需要附加不需要附加图像的图像;并非没有充分的理由这样做。它分散了相关信息的注意力。
-
像CRV对象这样的声音可能会使打印机的内置缓存超载?如果生成的PDF占用的空间少于CRV文件占用的空间,则可以解释为什么PDF可以工作,而CRV对象却不能。
-
@ user2366842听起来很合理。可是,后台打印程序服务不应该处理吗?它应防止打印机的缓存超载,并尽可能提供数据。有什么办法可以测试吗?
-
应该是后台打印程序服务来处理它,是的。不幸的是,如果这确实发生了,那将是一个完全不同的故事。我已经有一段时间没有与标签打印机进行大量的工作了,但是您可能想做更多的挖掘工作,甚至尝试与他们的客户服务部门联系,看看他们是否对为什么后台打印程序无法正常工作有任何想法。 (可能只是打印机所连接的计算机的操作系统中的配置更改)。
-
实际检验理论并验证其实际上是高速缓存的最佳方法是尝试创建一个较大的pdf,然后将其打印到标签打印机上。我能想到的最好方法是将一堆图像转储到文档中,然后将其复制/粘贴,直到您有足够大的东西,然后尝试将其打印到标签打印机上...如果文档组成一堆图像中,它比普通文本更快地通过打印机的缓存,因此您可以在看到问题之前减少标签的数量。
-
@ChicagoMike我设法测试了另一份报告,并且它在大约同一地方也表现出相同的症状。它看起来越来越像与CRV对象与打印机的交互有关。
-
@ user2366842在此最新测试期间,我保持打印机的"查看正在打印的内容"处于打开状态。据我所知,后台打印程序正在按预期的方式将页面送入打印机。它马上就给了它几页,然后在打印完一页时又给了它另一页。对我来说似乎很对,所以我唯一想到的就是CRV对象与该特定打印机的交互。
-
那么在那种情况下,我是个新主意。对不起。
-
@fbueckert我同意您的评估。我将查看制造商是否提供了任何最新的固件升级或驱动程序升级。如果是这样,请安装它们,然后重试。如果没有,请与他们联系并解释问题,也许他们有解决方法。
-
这个问题有没有更新/进展?
-
@ Karlta05至于诊断,不,不是真的。解决方法似乎一直有效,而且我还没有时间深入研究。
对于这个问题,我有一些想法导致打印时出现此行为。
所有标签长度的宽度问题可能超出页面尺寸。因此,您可以在缩小标签宽度时检查所有标签和页面是否为空白(即使标签显示不正确,我们也可以单独处理)。如果未显示(如您当前所知),则只需将所有标签的"可以增长"选项设置为true即可处理标签宽度。
如果一切正常,那么我认为您可以检查打印机的页面设置/边距。
如果上述方法不起作用,则只需添加静态标签和值即可创建新报告或现有报告,然后先进行预览,然后从代码中调用。您找到的东西。
根据我的经验(在这种情况下,我可能是错的),每当您的列将增加时,水晶报表中出现空白页时,报表的宽度就会造成问题。因此,要么将报告宽度设置为减小,要么将打印机页面设置为更大。因此它可以打印,否则它不会引发错误,而是提供空白页。
- 这不是页面大小或页边距问题。如果是这样,标签将在每个作业上打印错误。它不会显示这些症状。
-
此标签报告上有页码吗?但是,这将使3位溢出在第100页上不断显示此行为。
-
配置打印队列以保留作业,然后检查假脱机文件,您将能够知道它是否无法正确渲染或打印机/驱动程序是否快要死了。