【问题标题】:How does Windows bulk print PDF documents?Windows 如何批量打印 PDF 文档?
【发布时间】:2012-01-25 08:01:38
【问题描述】:

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

我想和 Windows 一样做,但它是怎么做的呢?

我将ProcessStartInfoPrintTo 动词一起使用,如您在之前的question 中所见。不幸的是,这一切都是无声的,打印多个文档时我遇到了很大的问题。我如何知道应用程序(通常是 Adob​​e Reader)何时完成打印?如果连续启动多个 printTo 进程,则似乎在前一个文档完成打印之前打开了一个文档。

我想避免对 Adob​​e Reader 进行硬编码,因为我的一些用户已经将它换成 Foxit Reader 或其他。

【问题讨论】:

  • 我们遇到了同样的(和相关的)问题,最后使用gsprint 作为解决方法。
  • 我要做的第一件事就是通过regedit(当然要小心)仔细检查你的机器上发生了什么。
  • 好的@Silas,我希望不要得出那个结论。 =/
  • @AakashM - 你能详细说明一下吗?
  • 谢谢@AakashM,看起来它正在做"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe" /p /h "%1",它应该对应于一个最小化的窗口,直接打印,与该文档。我想我可以对这种行为进行硬编码,但是没有 Acrobat 阅读器的用户怎么办?我想如果找到 Acrobat 我可以有一个解决方案,如果没有找到另一个解决方案......

标签: c# pdf printing


【解决方案1】:

我不知道您是否可以通过其他 PDF 查看器来执行此操作,以使这些查看器成为 Adob​​e Reader 的即插即用替代品。您可能必须根据要支持的每个程序对其进行定制。如果需要执行一项工作并且大多数计算机都预装了 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"

文档指定这将启动 Adob​​e Reader 并打印一个文件,该文件的路径必须完全指定,同时禁止打印对话框。 (复制粘贴自开发者常见问题解答。)

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

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

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

【讨论】:

  • 谢谢,@djdanlib。我现在已经确认我可以假设 Acrobat Reader 存在,因此我可以使用您的 Acrobat Reader /t 解决方案。它会打印,但添加 /h 不会使其最小化。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2010-09-26
  • 2023-04-03
  • 2019-12-09
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多