从Viewer打印出来表明打印机错误

2020-09-20 07:26发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将CRVS与SP18配合使用。

查看器将PrintMode设置为" PrintMode.PrintOutputController"。 现在,当在查看器中绘制报表时,客户单击工具栏上的"打印"按钮,该工具栏在内部执行CrystalDecisions.Windows.Forms.CrystalReportViewer.PrintReport()。

打开"打印"对话框时,建议使用默认打印机。 如何向客户推荐另一台打印机?

我尝试了几种方法为查看器打印对话框设置打印机:

  • CrystalDecisions.CrystalReports.Engine.PrintOptions.PrinterName
  • CrystalDecisions.CrystalReports.Engine.ReportDocument.ReportClientDocument.PrintOutputController.GetPrintOptions.PrinterName
  • CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions.PrinterName
  • System.Drawing.Printing.PrintDocument.PrinterSettings.PrinterName

它们都不起作用。...

此致

帕特里克

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将CRVS与SP18配合使用。

查看器将PrintMode设置为" PrintMode.PrintOutputController"。 现在,当在查看器中绘制报表时,客户单击工具栏上的"打印"按钮,该工具栏在内部执行CrystalDecisions.Windows.Forms.CrystalReportViewer.PrintReport()。

打开"打印"对话框时,建议使用默认打印机。 如何向客户推荐另一台打印机?

我尝试了几种方法为查看器打印对话框设置打印机:

  • CrystalDecisions.CrystalReports.Engine.PrintOptions.PrinterName
  • CrystalDecisions.CrystalReports.Engine.ReportDocument.ReportClientDocument.PrintOutputController.GetPrintOptions.PrinterName
  • CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions.PrinterName
  • System.Drawing.Printing.PrintDocument.PrinterSettings.PrinterName

它们都不起作用。...

此致

帕特里克

付费偷看设置
发送
6条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-20 08:23.采纳回答

嗨,帕特里克,

有关其他信息,请参见其他帖子。

是的,研发部门也问了我同样的事情,为什么我的逻辑如此复杂……我在试图找出引擎在做什么的过程中建立了步骤。 我只是从来没有回去清理它。 我敢肯定,有一种获取信息的方法要简单得多,我只是没有时间回去修复它。

通过将RAS的功能添加到CR运行时中,现在由最终开发人员来决定添加步骤/逻辑来处理大多数报告编码。 旧的RDC引擎中嵌入了很多功能,但是随着对.NET的更新,现在大多数由开发人员来进行后端编码。

.NET的本质,如果我们对其进行硬编码,那么它将限制最终开发人员的工作,只要我们公开属性包,您便可以自己处理它。

我一直打算重新了解它,并将尝试对其进行修复...

再次感谢

更新:因此,我仔细查看了我使用的代码,但不想将其更改为正在执行的操作。 它需要确定是否在报表中使用了页面设置,因为如果没有使用,则使用这些值,如果单击了,但是...则使用了这些值,如果未使用打印机,则此逻辑流程。 ..

我可以仅出于显示目的对其进行更改,但是应用程序中的其他例程会使用这些值并从屏幕读取内容,因此它是一种很好的方式。

再次感谢

能不能别闹
2楼-- · 2020-09-20 07:57

嗨帕特里克

啊,这改变了一切...

取决于您的报告。 因此,对于基本信纸尺寸报告,则使用P2P将始终选择用户默认打印机,这是P2P的基本工作流程,无法更改它。 而且,如果您使用Dissociate,引擎将尝试为用户默认打印机查找匹配的纸张尺寸和边距。

对于自定义纸张尺寸,总是最好使用特定的打印机或使用POC在运行时设置打印机。

几年前,大多数销售代表建议不要使用打印机选项。 现在,建议不要在CR 2008+中进行更新,除非特殊情况,否则我不建议使用"无打印机"。

基本区别是P2P使用Windows打印机通用对话框,POC使用CR设计器使用的对话框,并提供对打印机的更多控制。

因此,最适合您的应用程序的是更好的应用程序。

我不建议不要使用"无打印机",因为报表格式化引擎随后会使用USP10.dll和GDIPlus,并且某些用户使用默认打印机属性。 即使使用基本纸张尺寸,也可能会导致页边距问题,某些打印机的可打印区域较少,因此可能导致格式更改。

最好的做法是在设计报告时始终使用一台真实的打印机,选中"解除关联"并保存报告。 这样,如果找不到打印机,CR就会寻找报表设计所针对的同一打印机家族,并据此进行格式化。

如果您需要特定的纸张尺寸,对于预印表格和那些类型的纸张,请始终使用特定的打印机系列和打印机类别。 并使用完全相同的名称命名所有自定义纸张尺寸,Engine/RAS将首先查找纸张尺寸名称,然后再使用ENUM查找。

因此,要回答您的问题,哪一个最有效,取决于您,但是取决于工作流程,报告的设计方式以及它们是否需要使用特定的打印机和打印机属性。

请记住,当选择"无打印机"时,它将使用USP10.dll,GDIplus和用户默认的打印机进行格式化。

某些开发人员实际上将打印机属性保存到数据库字段中,并能够在其应用程序界面中更新默认值,然后使用CopyTo/CopyFrom保存/更新报告打印机属性。 这样就可以保持一致,然后不必使用多个例程来管理它们。

很多选项,很多功能,都取决于您要使它成为用户证明的程度...

也可能会导致您列出您支持的特定打印机...但是同样取决于您的应用程序和报告。

Don

SKY徐
3楼-- · 2020-09-20 08:20

嗨Patrick,

在我的测试应用中,查看返回的结果。

可能是因为您没有选中"打印机",也可能没有选中"解除关联"。

在这种情况下,您没有告诉引擎要选择哪种打印机,因此它将始终默认为默认打印机。

在最新版本的CR Designer中,当您打印报告时,将在对话框中看到"已保存的打印机名称"和"已保存的纸张尺寸"。

如果您没有在报告中看到此打印机,则默认为使用默认打印机,如果您不告诉我们要使用哪一台打印机,我们将无法选择打印机。

Don

打个大熊猫
4楼-- · 2020-09-20 08:08

该报告没有保存的打印机名称。

我最初的问题应该是:根据查看器的打印模式(POC或P2P),选择正确的安装方法(以及RAS-Engine,POC ...)为查看器设置打印机是否重要?


帕特里克(patrick)

Doze时光
5楼-- · 2020-09-20 08:01

哇,这就是我所说的真实答案/简历-谢谢唐。

现在是"但是";-)

有时候我问我为什么CR会很难使用它的界面(而不是说"很多选择",有时我会说"太多选择或可能性")。 作为最终程序员,我必须让它为所有独立于操作系统,打印机品牌和纸张尺寸的客户使用!

我们使用通常设置为"无打印机"和"取消关联"的常规报告。 其中将近95%的人使用A4作为纸张大小,由于ENUM的差异,Dymo报表只存在一些例外,必须在客户方进行调整...但是由于我们的ERP使用通用标准报表,因此我们不想对其进行调整 全部在客户方面。 我们还将打印机属性保存在数据库中,但有时通过CR VS在客户方重新设置它们并不能达到目的。

ER:通过CR具有透明的打印机管理/接口,而与使用P2P或POC,RAS或其他方法无关。 来自研发部门的CR专家是打印问题的专业人士...

如果我曾经从示例应用程序中实现getPrinterInfoOnOpen()的复杂逻辑,并且如果R&D会在CR VS中更改其逻辑,那么我或您将如何得知这一更改? 如果所有这些逻辑都保留在CR VS中,那就容易得多。

只是一些想法。

此致

Patrick

SAP小菜
6楼-- · 2020-09-20 08:17

嗨Patrick,

当前,引擎内置了很多逻辑来确定打印机设置。 我们无法做到这一切,因为大多数开发人员的工作流程都不同。

P2P永远不会改变,因为它是Visual Studio早期的基础,那时我们集成到VS Installer中。 也没有该版本的RAS。

您需要做的最大的事情就是在当前版本的CR Designer中打开每个报表,并将其与那些打印机属性一起保存。

借助更新的CR设计器,您现在还可以获取报告的历史记录:

history.png

您现在也可以使用引擎来获取这些值,并使用它来测试报告是否最新。 使用SaveAs()会更新历史记录,只有在CR Designers(craxddrt)能够更新历史记录的情况下,才故意这样做,因此实际上只有少数工作流程会更新该集合。 而且它是只读的。

返回打印机...

以下是一些使用自定义纸张尺寸的图片。

请注意报告中保存的打印机名称和纸张名称与打印机中的纸张名称...(Argox打印机和标签纸张名称)

现在,当您设置打印机时,引擎会在寻找该打印机名称:

因此,这可以照顾到ENUM的纸张大小,大多数打印机随机分配ENUM,Seagull Scientific打印机驱动程序允许您指定ENUM,以便可以以相同的方式在站点+上的每台打印机上进行设置。 但是它们不是免费的,但我发现它们是最一致和可配置的。 而且他们已经做了很长时间了,因此在驱动程序和可支持性方面都有很好的记录。

因此,由于CR依赖于操作系统,硬件,硬件驱动程序,打印机和打印机驱动程序,因此管理起来不那么容易,有那么多变量。 我在研发方面所做的工作是找到至少获得打印机属性的方法,并使开发人员能够使用我们的SDK相对容易地进行管理。 我让他们添加的一个ER不仅要查找打印机名称,而且要查找ENUM,因为您知道这确实引起了问题。

最后要注意的是,管理打印机完全取决于您,因为有太多的变量和那么多的打印机,然后放入Microsoft的Framework,这是我们能够使它们保持正常运行的全部措施。

有关打印的更多信息,请查看以下文档集:

https://archive.sap.com/documents/docs/DOC-57978

最重要的是,可以使您的报告保持最新或尽可能接近当前版本,并记住在格式化以及报告如何依赖打印机硬件和驱动程序以及具体指定受支持的打印机时,CR是与硬件相关的。 您所能支持的打印机的数量(这很有趣)...我们也能做到的...

这完全取决于您的应用程序,政府。 法律法规等要求使用确切的位置和纸张类型等,因此在这种情况下,您需要设计和支持这些特定类别的打印机...。

支持所有内容是一项艰巨的任务,但我们正在努力使开发人员尽可能地容易,并在所有平台和用途上提供支持...

玩得开心

一周热门 更多>