从Windows服务中打印PDF文档是否可行?

3
我希望能用C#构建一个Windows服务程序,它监听MSMQ队列以接收打印命令消息。每一条消息都涉及到一个PDF文档,并包含目的打印机的名称(也可能包括其他一些元数据,如需要打印的份数等)。该服务程序应该获取PDF文档并将其打印到目标打印机上。
问题: 有没有可能从Windows服务中打印任意PDF文件到打印机上?
补充说明:
实现过程不能依赖于Acrobat Reader或其他“GUI工具”。该Windows服务程序是无头运行的。此外,如果可能的话,我想避免为每个打印任务启动单独的进程。

1
请参考此链接:https://dev59.com/ClbTa4cB1Zd3GeqP7Agt - Ahror Kayumov
解决方案不应该依赖于Acrobat Reader。 - Olaf
.NET没有本地的PDF支持,因此您需要一个库或可执行文件来进行打印。 - CodeCaster
是的,我知道这个。我已经尝试了多个库,但到目前为止我还没有找到一个真正有效的。 - Olaf
@Olaf:很遗憾,有时候踩票是无法解释的。有些人会对任何东西进行踩票。 - Harry Johnston
显示剩余3条评论
1个回答

3

我使用Spire.PDF库。免费版本每个文件有10页的限制,不需要UI或Acrobat依赖。

https://www.nuget.org/packages/Spire.PDF/

   PdfDocument pdfdocument = new PdfDocument();
   pdfdocument.LoadFromFile(path);
   pdfdocument.PrinterName = printername;
   pdfdocument.PrintDocument.PrinterSettings.Copies = copiesNumber;
   pdfdocument.PrintDocument.Print();
   pdfdocument.Dispose();

我已经尝试过Spire.PDF。不幸的是,我遇到了并发问题。但这些问题只出现在Windows服务应用程序的上下文中。在简单的控制台应用程序或ASP.NET应用程序中没有任何异常。 - Olaf
这个应用程序应该作为Windows服务吗?它可以是一个WPF应用程序,以便您可以将其隐藏在系统托盘中。我正在处理的软件有一些监视器在后台运作,但它们是WPF并使用系统托盘。效果非常好。我希望您也能够实现这点。 - Murilo
我认为从概念上讲,该应用程序应该是一个窗口服务。它是在后端机器上运行的无头服务。WPF应用程序不适合,因为WPF应用程序“是为桌面设计的”。最初我认为这应该很容易,但现在我不确定是否可能。 - Olaf
从Windows服务打印 http://www.c-sharpcorner.com/UploadFile/87ad51/printing-from-a-windows-service/ - Sakthivel
E-iceblue在Spire.PDF 3.5版本中已经解决了并发问题。 - Olaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接