在我的机器上,当在Windows资源管理器中选择多个PDF文档时,右键单击并选择打印,最小化打开Adobe Acrobat Reader,并将所有文档静默地发送到打印机。
我想和Windows一样,但它是如何完成的?
我将ProcessStartInfo
与PrintTo
动词一起使用,您可以在之前的question中看到。不幸的是,这一切都是沉默的,而且在打印多个文档时我遇到了很大的问题。我如何知道应用程序(通常是Adobe Reader)何时完成打印?如果连续启动多个printTo进程,则在上一次完成打印之前,似乎打开了一个文档。
我想避免硬编码Adobe Reader,因为我的一些用户已经将它交换为福昕阅读器或其他人。
答案 0 :(得分:4)
我不知道您是否可以通过其他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 Command Line Reference
找到了另一个命令行参考所以基本上,你可以迭代你的PDF列表,并为每个开始一个带有Process.Start调用的新打印过程,并等待它通过Process.WaitForExit关闭。这将使您的程序看起来像是挂起而我讨厌程序在执行操作时挂起,因此您应该在可取消的BackgroundWorker中执行此操作,该工作程序报告进度并且仍然使GUI略微交互。