我工作上的一个项目,涉及收到消息从另一个应用程序、格式的内容这一信息,并将其发送给打印机。技术的选择是C#windows服务。输出可以被称为一个报告,我假设,但是报告的引擎是不必要的。一个简单的模板发动机,像StringTemplate,或者甚至XSLT输出HTML将被罚款。这问题我也找到一个免费的方式打印这样的输出服务。由于它 似乎 它将工作,我的工作一个原型,使用微软的RDLC,填充地报告,然后呈现为一个图像存储器流,然后,我将打印。问题是:

  • 多页印刷将是一个巨大的头痛的问题。
  • 仍然必须使用PrintDocument打印的存储器流,这是不支持在Windows服务(虽然它可能的工作还没有得到那么远的原型呢)
  • 如果数据来变化,我必须要改变该数据集类的数据正在deserialized入。坏坏坏。

任何人都不得不做任何事情远这样?任何建议?我已经发布的一个问题有关的印刷HTML没有输入的用户,并经浪费了3天,我得出的结论是,它不能这样做,至少不与任何免费提供的工具。

所有帮助表示赞赏。

编辑:我们是在2.0版的.净框架。

有帮助吗?

解决方案

相信我,你会花更多的钱,试图搜索/开发一个解决方案相比,购买第三方的组成部分。不要重新发明轮子,去支付的解决方案。

印刷是一个复杂的问题和我想要看到的一天,当更好框架的支持添加这一点。

其他提示

印刷从Windows服务是真的痛苦。它似乎工作...有时候...但是最后它craches或引发一个例外时,没有任何明确的理由。这真的很有希望的。正式,它甚至 不支持, ,没有任何解释,也没有任何建议的一个替代解决方案。

最近,我一直面临的问题和经过几次不成功的试验和实验,我来最后有两个可行的解决方案:

  • 写你自己的印刷DLL使用Win32API(C/C++为实例),那么使用它自己的服务P/调用(工作)
  • 写你自己的印刷COM+分量,然后用它来自你的服务。我选择这一解决方案与最近成功(而这是第三方COM+组分,不自己写)它的工作绝对不错。

我已经做到了。这是一个痛苦的A*s.问题是,印刷需要GDI引擎是在地方,这通常意味着你必须要有桌面上,其中只载荷当你登录。如果你们试图要做到这一服务在服务器上,然后你通常不是登录。

因此,首先你不可以运行正常服务用户,但不是作为一个真正的用户登录的交互式的权利。然后你必须调整服务注册表(我忘记了如何在那一刻,就必须找到代码我可以做的如果今晚你真的很有兴趣).最后,你必须祈祷。

你最大的长期的头痛会打印的驱动程序。如果你正在运行服务无需登录用户,一些印刷等驱动弹出对话的时间。发生什么事当您打印机调色剂?或者纸?驾驶员可能会弹出一个对话,这将永远不会被看见,并举行了打印机的队列,因为没有人登录!

印刷服务是一个糟糕的想法。网络打印机连接"每用户".你可以标记服务可以运行为的特定用户,但是我认为这是一个糟糕的安全的做法。你可能可以连接到一个地方打印机,但我仍然犹豫地前往这条路线。

最好的选择是必须的服务的数据存储和有用户启动的应用程序做的印刷要求的服务的数据。或者一个共同的位置存储数据,像一个数据库。

如果你需要有数据的印刷作为固定的时间间隔,设置一个任务的事件通过的任务的调度程序。启动一个进程从一个服务将需要知道的用户名和密码,而这又是坏安全的做法。

至于印刷本身,使用第三方的工具,以生成的报告将是最简单的。

来回答你的第一个问题,这可以相当直截了当根据这些数据。我们有各种各样的服务为基础的应用程序做什么你都要求。通常,我们分析传入的文件和包裹我们自己的Postscript或PCL。如果你的布局是相当简单,然后还有一些非常基本的PCL码你可以用它来提供的字体/打印上篮你想(我会更乐意给你一些指导,在这里离线).

一个你有一个印刷的文件你可以把它送到一个UNC打印机,是共享的,直接向本地安装的打印机,或甚至到了IP设备(生的或合法永久居民的类型数据)。

但是,如果你正在下降PDF路径,最简单的方法是发送PDF格式的输出,打印机,支持直接打印PDF(其中许多现在要做的).在这种情况下你只是发送PDF格式的装置和远离它印刷品。

其他的选择是启动 终止 这应该是免费为你的需要(检查的许可,因为他们有几个不同的版本,一些GNU,一些通用公共许可证等)。 要么使用它建立在打印功能,或简单地转换为Postscript和发送来的设备。我已经终止使用许多时间在业务应用程序,但不是一个巨大风扇你会基本上被炮轰出和执行的命令行程序来执行转换。这就是说,它是一个稳定的应用程序,不会倾向于优雅地失败

这可能不是你在找什么,但如果我需要做这种快速的和肮脏,我将:

  1. 创建一个独立的WPF应用程序(所以我可以使用内在文档处理)
  2. 得到服务的能力与在桌面(注意,你实际上没有显示任何东西在桌面上,或可以登录在为此工作)
  3. 有的服务运行的应用程序,以及给它的数据到印刷品。

你很可能也卷染这个打印的网页浏览器运行从服务(虽然我建议你自己壳即,而不是使用一个完整的浏览器)。

为了更详细的(也是免费的)解决方案,最好的办法可能是手动格式的文档(使用GDI+做的布局为您)。这是冗长的,容易出错,耗费时间,并浪费大量的纸张在发展,但也给你最控制过什么的打印机。

如果你可以输出到后脚本了一些打印机打印什么,得到FTPed到某些目录上他们。

我们用这个来获得经过印刷信用我们的大学暴露在我们,但是如果你的服务输出的一个ps然后你就可以ftp ps文件的打印机。

我们使用 DevExpress'XtraReports 打印服务没有任何问题。他们的报告的模型类似于Windows的形式,所以你可以动态插入的文本的元素,然后的问题的打印的命令。

我认为我们要去的第三方的路线。我喜欢XSL->HTML>PDF>打印机的流动...Winnovative的 HTML PDF 看起来很好的第一部分,但我跑进一块找到一个好的打印PDF解决方案...任何建议?理想情况下的许可证将在一个开发商的基础上,不是在部署运行的基础。

在回答你的问题有关PDF印刷,我还没有找到一个优雅的解决方案。我是"壳"ing出Adobe这是不可靠的和所需的用户可以登录在所有的时间。要解决这个具体问题,我要求的文件,我们过程(发票)被格式化,作为多页Tiff的文件,而不是其可以分裂和使用印刷机。网打印功能。Adobe的位置似乎是"获得的用户查看文件在Adobe读者,他们可以点击打印"。没有用的。

我仍然敏锐地发现一个好的方法,生产高质量的报告,它可以输出的网络服务器...

印刷使用的系统。图。印刷不支持通过MS,作为每Yann崔文的答复。但是,你可能可以使用的新的、基于WPF的、系统。印刷(I 想想)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top