从.NET服务打印我正在处理一个项目,该项目涉及从另一个应用程序接收消息、格式化该消息的内容并将其发送到打印机。选择的技术是C#windows服务。我想,输出可以称为报告,但不需要报告引擎。像StringTemplate这样的简单模板引擎,甚至输出HTML的XSLT都可以。我遇到的问题是找到一种免费的方式来打印服务的这种输出。由于它似乎有效,我正在使用Microsoft的RDLC工作原型,填充本地报告,然后将其作为图像呈现到内存流中,然后我将打印它。问题是:有没有人像这样远程做过任何事情?有什么建议么?我问过一个关于在没有用户输入的情况下打印HTML的问题,在浪费了大约3天之后,我得出的结论是它无法完成,至少不能使用任何免费提供的工具。所有帮助表示赞赏。编辑:我们使用的是.NET框架的2.0版。相信我,与购买第3方组件相比,您将花费更多的钱来搜索/开发此解决方案。不要重新发明轮子并使用付费解决方案。打印是一个复杂的问题,我希望看到为此添加更好的框架支持的那一天。从Windows服务打印真的很痛苦。它似乎工作......有时......但最后它会在没有任何明确原因的情况下时不时地抛出异常。真是没希望了。正式地,它甚至没有得到任何解释的支持,也没有任何替代解决方案的建议。最近遇到了这个问题,经过几次尝试和尝试都不成功,我终于找到了两个可行的解决方案:我做到了,这是一个痛苦的A*s。问题是打印需要GDI引擎到位,这通常意味着您必须拥有桌面,它仅在您登录时加载。如果您尝试从服务器上的服务执行此操作,那么您'通常没有登录。所以首先你不是以普通服务用户身份运行,而是以具有交互式登录权限的真实用户身份运行。然后你必须调整服务注册表项(我现在忘记了,如果你真的感兴趣,必须找到我今晚可以做的代码)。最后,你必须祈祷。您最大的长期头痛将是打印驱动程序。如果您在没有登录用户的情况下作为服务运行,某些打印驱动程序会不时弹出对话框。当打印机碳粉用完时会发生什么?还是缺纸?驱动程序可能会弹出一个从未见过的对话框并占用打印机队列,因为没有人登录!从服务打印是个坏主意。网络打印机“按用户”连接。您可以将服务标记为以特定用户身份运行,但我认为这是一种糟糕的安全做法。您可以连接到本地打印机,但我仍然犹豫要不要走那条路。最好的选择是让服务存储数据,并让用户启动的应用程序通过向服务请求数据来进行打印。或存储数据的常见位置,例如数据库。如果您需要定期打印数据,请通过任务计划程序设置任务事件。从服务启动进程需要知道用户名和密码,这也是很糟糕的安全性。至于打印本身,使用第三方工具生成报告是最简单的。要回答您的第一个问题,根据数据,这可能相当简单。我们有各种基于服务的应用程序,可以完全满足您的需求。通常,我们解析传入的文件并围绕它包装我们自己的Postscript或PCL。如果布局相当简单,您可以将一些非常基本的PCL代码包裹起来,为您提供所需的字体/打印布局(我非常乐意在此处离线为您提供一些指导)。您有一个可打印的文件,您可以将其发送到共享的UNC打印机,直接发送到本地安装的打印机,甚至发送到设备的IP(RAW或LPR类型数据)。但是,如果您要使用PDF路线,最简单的方法是将PDF输出发送到支持直接PDF打印的打印机(现在有很多)。在这种情况下,您只需将PDF发送到设备并打印即可。另一种选择是启动Ghostscript,它应该可以免费满足您的需要(检查许可证,因为它们有一些不同的版本,一些GNU,一些GPL等)并使用它的内置打印功能或只是转换为Postscript并发送到装置。我已经在服务应用程序中多次使用Ghostscript,但并不是一个忠实的粉丝,因为您基本上需要掏空并执行命令行应用程序来进行转换。话虽如此,它是一个稳定的应用程序,往往会优雅地失败,这可能不是您想要的,但如果我需要快速而肮脏,我会:创建一个单独的WPF应用程序(这样我就可以使用内置的文档处理)启用该服务以与桌面交互(请注意,您实际上不必在桌面上显示任何内容,或登录即可进行此操作)让该服务运行该应用程序,并向其打印数据。您也许还可以从服务运行的Web浏览器进行打印(尽管我建议构建您自己的IE外壳而不是使用完整的浏览器)。对于更详细(和免费)的解决方案,最好的办法可能是自己手动设置文档格式(使用GDI+为您进行布局)。它乏味、容易出错、耗时,并且在开发过程中浪费大量纸张,但也让您最大限度地控制打印机上的内容。如果你可以输出到一个post脚本,一些打印机会打印任何通过FTP传输到它们上面某个目录的东西。我们将它用于我们大学曝光的打印学分,但如果您的服务输出到ps,那么您可以将ps文件通过ftp传输到打印机。我们正在使用DevExpress的XtraReports从服务中打印,没有任何问题。它们的报表模型类似于Windows窗体,因此您可以动态插入文本元素,然后发出打印命令。我认为我们将走第三方路线。我喜欢XSL->HTML->PDF->打印机流程...Winnovative的HTML到PDF的第一部分看起来不错,但我遇到了障碍并找到了一个很好的PDF打印解决方案...有什么建议吗?理想情况下,许可证将基于开发人员,而不是基于部署的运行时。在回答有关PDF打印的问题时,我还没有找到一个优雅的解决方案。我对Adob??e的“外壳”不可靠,需要用户始终登录。为了解决这个特殊问题,我要求将我们处理的文件(发票)格式化为多页Tiff文件,而不是可以使用本机.NET打印功能拆分和打印的文件。Adobe的立场似乎是“让用户在Adob??eReader中查看文档,然后他们可以点击打印”。无用。我仍然希望找到一种从网络服务器输出高质量报告的好方法......根据YannTrevin的回复,MS不支持使用System.Drawing.Printing进行打印。但是,您可以使用新的基于WPF的System.Printing(我认为)。请注意——本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
