Windows如何批量打印PDF文档?

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

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

我正在使用带有PrintTo动词的ProcessStartInfo ,正如您在上一个问题中看到的那样。 不幸的是,这一切都是沉默的,而且在打印多个文档时我遇到了很大的问题。 我如何知道应用程序(通常是Adobe Reader)何时完成打印? 如果连续启动多个printTo进程,则在上一次完成打印之前,一个文档似乎打开。

我想避免硬编码Adobe Reader,因为我的一些用户已经将它交换为福昕阅读器或其他人。

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

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

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

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

还有另一种选择。 Adobe Developer FAQ( http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/intro_to_sdk/DeveloperFAQ.pdf )声明此命令行可以按文件运行:

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

该文档指定这将启动Adobe Reader并打印一个文件,其路径必须完全指定,同时禁止“打印”对话框。 (从开发人员常见问题解答中复制粘贴。)

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

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

所以基本上,你可以迭代你的PDF列表,并为每个开始一个新的打印过程与Process.Start调用,并等待它通过Process.WaitForExit关闭。 这将使您的程序看起来挂起,我讨厌程序在执行操作时挂起,因此您应该在可取消的BackgroundWorker中执行此操作,该工作会报告进度并使GUI保持一定的交互性。