C# Windows如何批量打印PDF文档?

C# Windows如何批量打印PDF文档?,c#,pdf,printing,C#,Pdf,Printing,在我的机器上,当在Windows资源管理器中选择多个PDF文档时,右键单击并选择“打印”,Adobe Acrobat Reader将打开并最小化,所有文档将以静默方式发送到打印机 我想做和Windows一样的事情,但是怎么做呢 我将ProcessStartInfo与PrintTo动词一起使用,正如您在前面的一篇文章中所看到的。不幸的是,这是一切,但沉默,我有大问题时,打印多个文件。我如何知道应用程序(通常是Adobe Reader)何时完成打印?如果连续启动多个printTo进程,则在上一个文档

在我的机器上,当在Windows资源管理器中选择多个PDF文档时,右键单击并选择“打印”,Adobe Acrobat Reader将打开并最小化,所有文档将以静默方式发送到打印机

我想做和Windows一样的事情,但是怎么做呢

我将
ProcessStartInfo
PrintTo
动词一起使用,正如您在前面的一篇文章中所看到的。不幸的是,这是一切,但沉默,我有大问题时,打印多个文件。我如何知道应用程序(通常是Adobe Reader)何时完成打印?如果连续启动多个printTo进程,则在上一个文档完成打印之前,一个文档似乎已打开


我希望避免硬编码AdobeReader,因为我的一些用户已经将它换成了FoxitReader或其他版本。

我不知道您是否可以用其他PDF查看器进行硬编码,以使这些查看器成为AdobeReader的即插即用替代品。您可能需要根据您想要支持的每个程序进行定制。在一个人的系统上安装读卡器并不是那么困难,真的,如果需要执行一项工作,并且大多数计算机都预装了读卡器的话

您必须知道的第一件事是,当您通过该动词(通过代码或浏览器上下文菜单)告诉它打印时,您正在执行以下操作:

""C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe"" /p /h "%1" 
注意参数:/p(告诉它打印)和/h(开始最小化)

还有另一个选择。Adobe Developer FAQ()声明此命令行适用于每个文件:

AcroRd32.exe /t path "printername" "drivername" "portname"
文档指定这将启动Adobe Reader并打印一个文件,该文件的路径必须完全指定,同时取消打印对话框。(复制粘贴自开发人员常见问题解答。)

还有一个选项/n“启动Acrobat或Adobe Reader的单独实例,即使其中一个实例当前处于打开状态。”(开发人员常见问题解答再次出现)。我想,它可以用于并行运行多个打印作业

我在以下位置找到了另一个命令行参考:


因此,基本上,您可以迭代PDF列表,并为每个PDF启动一个带有process.start调用的新打印进程,然后等待它通过process.WaitForExit关闭。这将使您的程序看起来挂起,我讨厌程序在执行操作时挂起,因此您应该在一个可取消的BackgroundWorker中执行此操作,该BackgroundWorker报告进度,并且仍然让您的GUI保持一定的交互。

我们也有相同的(和相关的)我要做的第一件事就是用
regedit
(当然要小心)仔细检查一下你的机器上到底发生了什么。好的@Silas,我不希望得出这个结论=/@AakashM-你能详细说明一下吗?谢谢@AakashM,看起来它正在做
“C:\Program Files(x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe”/p/h“%1”
,它应该对应于一个最小化的窗口,直接打印该文档。我想我可以硬编码这种行为,但是没有Acrobat reader的用户呢?如果找到Acrobat,我想我可以有一个解决方案,如果找不到,我可以有另一个解决方案……谢谢,@djdanlib。现在我已经确认,我可以假设Acrobat Reader存在,因此我可以使用您的
Acrobat Reader/t
解决方案。它可以打印,但添加
/h
并不能使其最小化。