打开 Adobe 阅读器以打印 PDF 的批处理文件不会结束/关闭


Batch file that opens adobe reader to print PDF doesn't end/close

我在批处理文件中有以下代码,由PHP脚本使用shell_exec()调用:

"C:'Program Files (x86)'Adobe'Reader 10.0'Reader'AcroRd32.exe" 
/t "D:'xampp'htdocs'instrument'app'webroot'Repair Tickets'%1.pdf"
''hnurenfp01'Accounts_FS-1128MFP
参数

%1 是作为参数从 PHP 脚本发送到批处理文件的文件名。

观察到的行为:

  • PHP 页面使用正确的参数成功调用批处理文件
  • AcroRd32 的两个实例.exe在服务器上静默启动
  • PDF 文件打印到网络打印机
  • AcroRd32.exe 实例不结束/关闭
  • 批处理文件保持运行(直到手动结束 AcroRd32.exe进程(
  • PHP 脚本保持执行状态,因此阻止客户端计算机执行任何进一步的操作

预期行为:

  • PHP 页面使用正确的参数成功调用批处理文件
  • AcroRd32 的两个实例.exe在服务器上静默启动
  • PDF 文件打印到网络打印机
  • AcroRd32.exe 实例结束/关闭
  • 批处理脚本完成(这反过来应该释放 PHP 脚本(
  • PHP脚本继续并最终结束,以允许最终用户继续他们的工作

失败的解决方案:

  • 在批处理文件中使用 TASKKILL 在打印后结束 AcroRd32.exe 进程,但 AcroRd32.exe 保持打开状态,即使使用/F(强制(标志也是如此。当我手动结束 AcroRd32.exe 进程时,批处理文件继续,然后执行 TASKKILL 行,这当然会返回"找不到进程"错误,因为它不再存在。因此,打印后控件似乎不会返回到批处理文件,而是保留在 AcroRd32.exe 中。

有没有人知道如何在PDF打印后关闭Adobe Reader?

我在 http://www.robvanderwoude.com/commandlineswitches.php#Acrobat 找到了以下引用

以静默方式打印 PDF 文件:


AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]最后一个命令将打开一个新的Adobe Reader窗口,打印PDF文件,然后终止其窗口,除非该窗口恰好是唯一剩下的 Adobe Reader 窗口:至少有一个 Adobe Reader 窗口将保持打开状态。

最后这句话是个坏消息。

您可以通过 START 命令同时使用/N 和/T 选项调用 AcroRD32.exe,然后批处理文件可以在打印作业执行时立即继续。如果您不介意读取器保持打开状态的一个实例,那么您就完成了。

如果必须关闭读取器,则批处理将不得不终止它。但我不确定您的批处理文件如何判断打印作业何时完成。您可以使用 TIMEOUT 引入任意延迟,但这听起来有风险。

我对打开的"AcroRd32.exe的两个实例"有点困惑。如果这是程序的工作方式,那么听起来/N 开关将关闭 2 个实例中的 1 个。批处理可以通过 START 启动打印作业,延迟几秒钟以使打印作业进程有时间启动,然后使用 TASKLIST|FINDSTR 用于监视循环中 AcroRd32.exe 进程的数量。当计数从 2 变为 1 时,打印作业应已完成,您可以终止剩余的进程。无论如何,理论上:)

祝你好运。