我正在处理一个项目,涉及从另一个应用程序接收消息,格式化该消息的内容,并将其发送到打印机.选择的技术是C#windows服务.我想,输出可以称为报告,但不需要报告引擎.一个简单的模板引擎,如StringTemplate,甚至XSLT输出HTML都可以.我遇到的问题是找到一种从服务中打印此类输出的免费方法.因为它似乎认为它会工作,我在一个工作原型使用微软的RDLC,填充本地报表,然后使其作为一个图像到内存流,我会再打印.问题是:
多页打印将是一个很大的问题.
还是要用的PrintDocument打印内存流,这是在Windows服务不支持(虽然它可能工作 - 与原型远远没有得到尚)
如果数据发生变化,我必须更改数据集和数据被反序列化的类.坏坏.
有没有人不得不像这样远程做任何事情?有什么建议?我已经发布了一个问题有关打印HTML无需用户输入,并就浪费约3天后,我来,它不能做的结论,至少不与任何免费提供的工具.
所有帮助表示赞赏.
编辑:我们在.NET框架的2.0版本.
相信我,与购买第三方组件相比,您将花更多的钱尝试搜索/开发此解决方案.不要重新发明轮子并寻求付费解决方案.
打印是一个复杂的问题,我很想看到为此添加更好的框架支持的那一天.
从Windows服务打印真的很痛苦.它似乎有效......有时候......但最后它不时会出现异常情况或没有任何明确原因.这真的没有希望了.在官方方面,它甚至没有得到任何解释的支持,也没有任何替代解决方案的建议.
最近,我遇到了这个问题,经过几次不成功的试验和试验后,我终于找到了两个可行的解决方案:
使用Win32 API编写自己的打印DLL(例如在C/C++中),然后使用P/Invoke从服务中使用它(工作正常)
编写自己的打印COM +组件,然后从您的服务中使用它.我最近选择了这个解决方案成功(但它是第三方COM +组件,不是自己编写的)它的工作原理也一样.
我做到了 这是A*s的痛苦.问题是打印需要GDI引擎到位,这通常意味着您必须拥有桌面,只有在您登录时才会加载.如果您尝试从服务器上的服务执行此操作,那么你通常没有登录.
因此,首先您不能作为普通服务用户运行,而是作为具有交互式登录权限的真实用户运行.然后你必须调整服务注册表项(我忘了现在如果你真的感兴趣的话,必须找到我今晚可以做的代码).最后,你必须祈祷.
您最大的长期头痛将是打印驱动程序.如果您在没有登录用户的情况下作为服务运行,则某些打印驱动程序会不时弹出对话框.打印机墨粉用完后会发生什么?还是没纸了?驱动程序可能会弹出一个永远不会看到的对话框,并因为没有人登录而占用打印机队列!