2011-12-21 224 views
3

在我的机器上,当在Windows资源管理器中选择多个PDF文档时,右击并选择打印,Adobe Acrobat Reader打开最小化,所有文档都悄悄地发送到打印机。Windows如何批量打印PDF文档?

我想和Windows一样做,但它是如何完成的?

我正在使用ProcessStartInfoPrintTo动词,就像您在之前的question中看到的那样。不幸的是,这是一切,但沉默,我打印多个文件时遇到大问题。我如何知道应用程序(通常是Adobe Reader)何时完成打印?如果在一行中启动多个printTo进程,则在前一个打印完成之前,似乎打开一个文档。

我想避免硬编码Adobe Reader,因为我的一些用户已经将它与Foxit Reader或其他软件进行了交换。

+0

我们有相同的(和相关的)问题,最后使用[gsprint](http://pages.cs.wisc.edu/~ghost/gsview/gsprint.htm)作为解决方法。 – Silas 2011-12-21 14:06:56

+0

我要做的第一件事就是通过使用'regedit'来仔细检查机器上发生的事情(当然要仔细)。 – AakashM 2011-12-21 14:10:22

+0

好@Silas,我希望不会得出这个结论。 =/ – Skywise 2011-12-21 14:23:28

回答

4

我不知道您是否可以通过其他PDF查看器以这种方式进行操作,以便这些查看器是Adobe Reader的即插即用替代品。您可能需要为您想要支持的每个程序定制它。在系统上安装Reader并不困难,如果有必要执行一项工作,并且大多数计算机都预装了它,那么确实如此。

,你必须知道的第一件事是,当你告诉它通过该动词打印,通过代码或资源管理器右键菜单,你在做这样的事情:

""C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe"" /p /h "%1" 

注意的参数:/p(告诉它打印)和/ h(开始最小化)。

还有另一种选择。 Adobe开发人员常见问题解答(http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/intro_to_sdk/DeveloperFAQ.pdf)指出,该命令行工作的每个文件:

AcroRd32.exe /t path "printername" "drivername" "portname" 

该文件指定该启动Adobe Reader和打印文件,其路径必须充分说明,同时抑制打印对话框。 (从开发者FAQ复制粘贴。)

还有一个选项“n启动一个单独的Acrobat或Adobe Reader实例,即使当前打开了一个。” (开发者常见问题解答。)这可以用来并行运行多个打印作业,我想。

我发现又在另一个命令行参考:Adobe Reader Command Line Reference

因此,基本上,你可以重复你的PDF文件的列表,并为每一个启动一个新的印刷工艺用的Process.Start呼叫并等待它关闭通过Process.WaitForExit。这会让你的程序看起来挂起来,而且我讨厌程序在执行操作时挂起,所以你应该在可撤销的BackgroundWorker中做到这一点,它可以报告进度,并保持GUI的交互性。

+0

谢谢,@djdanlib。我现在已经证实我可以假设Acrobat Reader已经存在,所以我可以使用你的'Acrobat Reader/t'解决方案。它会打印,但添加'/ h'不会使其最小化。 – Skywise 2011-12-21 15:00:30