在我的机器上,当选择Windows Explorer中的多个PDF文档时,右击并选择Print,将被打开最小化,所有文档都被静默地发送到打印机。
我想和Windows做同样的事情,但是它是如何完成的呢?
我使用的是ProcessStartInfo和PrintTo动词,正如您在以前的question中看到的那样。不幸的是,这一切都是沉默的,我在打印多个文件时遇到了很大的问题。我如何知道应用程序(通常是Adobe )何时完成打印?如果在一行中启动多个printTo进程,则在前面的文档打印完成之前,似乎会打开一个文档。
我想避免硬编码Adobe,因为我的一些用户已经将它交换为Foxit或其他用户。
发布于 2011-12-21 14:39:27
我不知道你是否可以和其他PDF阅读器一起使用,让这些查看器成为Adobe的即插即用替代品。您可能需要根据您想要支持的每个程序来调整它。如果有必要执行一项工作,并且大多数计算机都是预装的,那么在一个系统上安装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并打印一个必须完全指定路径的文件,同时取消“打印”对话框。(复制粘贴自开发人员常见问题解答)
还有一个选项/n,它“启动一个单独的Acrobat或Adobe实例,即使一个实例当前是打开的。”(开发商的常见问题再次。)我想,它可以用于并行运行多个打印作业。
我在以下位置找到了另一个命令行引用:Adobe Reader Command Line Reference
因此,基本上,您可以迭代您的PDF列表,每一个都使用一个Process.Start调用启动一个新的打印过程,然后等待它通过一个Process.WaitForExit关闭。这将使您的程序看起来像是挂起的,我讨厌程序在执行操作时挂起,所以您应该在一个可取消的BackgroundWorker中这样做,该报告进度,但仍然保持GUI的交互性。
https://stackoverflow.com/questions/8590998
复制相似问题