当前位置:  开发笔记 > 编程语言 > 正文

从.NET服务打印

如何解决《从.NET服务打印》经验,为你挑选了3个好方法。

我正在处理一个项目,涉及从另一个应用程序接收消息,格式化该消息的内容,并将其发送到打印机.选择的技术是C#windows服务.我想,输出可以称为报告,但不需要报告引擎.一个简单的模板引擎,如StringTemplate,甚至XSLT输出HTML都可以.我遇到的问题是找到一种从服务中打印此类输出的免费方法.因为它似乎认为它会工作,我在一个工作原型使用微软的RDLC,填充本地报表,然后使其作为一个图像到内存流,我会再打印.问题是:

多页打印将是一个很大的问题.

还是要用的PrintDocument打印内存流,这是在Windows服务不支持(虽然它可能工作 - 与原型远远没有得到尚)

如果数据发生变化,我必须更改数据集和数据被反序列化的类.坏坏.

有没有人不得不像这样远程做任何事情?有什么建议?我已经发布了一个问题有关打印HTML无需用户输入,并就浪费约3天后,我来,它不能做的结论,至少不与任何免费提供的工具.

所有帮助表示赞赏.

编辑:我们在.NET框架的2.0版本.



1> Vaibhav..:

相信我,与购买第三方组件相比,您将花更多的钱尝试搜索/开发此解决方案.不要重新发明轮子并寻求付费解决方案.

打印是一个复杂的问题,我很想看到为此添加更好的框架支持的那一天.



2> Yann Trevin..:

从Windows服务打印真的很痛苦.它似乎有效......有时候......但最后它不时会出现异常情况或没有任何明确原因.这真的没有希望了.在官方方面,它甚至没有得到任何解释的支持,也没有任何替代解决方案的建议.

最近,我遇到了这个问题,经过几次不成功的试验和试验后,我终于找到了两个可行的解决方案:

使用Win32 API编写自己的打印DLL(例如在C/C++中),然后使用P/Invoke从服务中使用它(工作正常)

编写自己的打印COM +组件,然后从您的服务中使用它.我最近选择了这个解决方案成功(但它是第三方COM +组件,不是自己编写的)它的工作原理也一样.


GDI +从未被设计/测试过在服务环境中工作.这就是为什么它不起作用.你应该使用GDI和它的功能来绘制.请参阅此文档以查找等效的Win32调用:http://msdn.microsoft.com/en-us/library/aa302340.aspx#win32map_printingfunctions

3> Nick..:

我做到了 这是A*s的痛苦.问题是打印需要GDI引擎到位,这通常意味着您必须拥有桌面,只有在您登录时才会加载.如果您尝试从服务器上的服务执行此操作,那么你通常没有登录.

因此,首先您不能作为普通服务用户运行,而是作为具有交互式登录权限的真实用户运行.然后你必须调整服务注册表项(我忘了现在如果你真的感兴趣的话,必须找到我今晚可以做的代码).最后,你必须祈祷.

您最大的长期头痛将是打印驱动程序.如果您在没有登录用户的情况下作为服务运行,则某些打印驱动程序会不时弹出对话框.打印机墨粉用完后会发生什么?还是没纸了?驱动程序可能会弹出一个永远不会看到的对话框,并因为没有人登录而占用打印机队列!

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有