在我的机器上,当在 Windows 资源管理器中选择多个 PDF 文档时,右键单击并选择打印,Adobe Acrobat Reader 会最小化打开,所有文档都会自动发送到打印机。
我想做和 Windows 一样的事情,但它是怎么做到的?
我正在使用 ProcessStartInfo
和 PrintTo
动词,正如您在之前的 question 中看到的那样.不幸的是,这只是无声的,打印多个文档时我遇到了很大的问题。我如何知道应用程序(通常是 Adobe Reader)何时完成打印?如果连续启动多个 printTo 进程,一个文档似乎在前一个文档完成打印之前打开。
我想避免对 Adobe Reader 进行硬编码,因为我的一些用户已将其换成 Foxit Reader 或其他软件。
最佳答案
我不知道您是否可以与其他 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 并打印一个文件,该文件的路径必须完全指定,同时禁止显示“打印”对话框。 (从开发者常见问题解答中复制粘贴。)
还有一个选项/n,它“启动一个单独的 Acrobat 或 Adobe Reader 实例,即使其中一个当前处于打开状态。” (又是开发者常见问题解答。)我想这可以用来并行运行多个打印作业。
我在以下位置找到了另一个命令行引用:Adobe Reader Command Line Reference
基本上,您可以迭代您的 PDF 列表,并为每个 PDF 使用 Process.Start 调用启动一个新的打印过程,并等待它通过 Process.WaitForExit 关闭。这会让你的程序看起来挂起,我讨厌程序在执行操作时挂起,所以你真的应该在一个可取消的 BackgroundWorker 中执行此操作,它会报告进度并仍然让你的 GUI 保持一定的交互性。
关于c# - Windows如何批量打印PDF文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8590998/