c# - Windows如何批量打印PDF文档?

标签 c# pdf printing

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

我想做和 Windows 一样的事情,但它是怎么做到的?

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

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

最佳答案

我不知道您是否可以与其他 PDF 查看器一起使用,使这些查看器成为 Adob​​e 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 保持一定的交互性。

关于c# - Windows如何批量打印PDF文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8590998/

相关文章:

php - 在 Javascript 文件中在屏幕上打印 html 输入属性和变量

c# - TVS RP-45卷筒纸打印

c# - 有理由不使用 CustomAttributes 吗?

c# - .NET 类及其源代码

c# - 解析 Html 文档获取所有具有 ID 和值的输入字段

pdf - 如何使用 iText 将 XHTML 嵌套列表转换为 pdf?

c# - 如何在 C# 中维护字符串中引用的多个引号

python - 使用 ReportLab 向 PDF 正确添加页码和总页数

php - 从 PHP Web 应用程序打印客户端报告

javascript - 是否有任何 javascript 函数,甚至在 jQuery 库中与 PHP print_r() 功能相同?