加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 打开adobe reader打印PDF的批处理文件不会结束/关闭

发布时间:2020-12-13 16:45:09 所属栏目:PHP教程 来源:网络整理
导读:我在使用 shell_exec()的 PHP脚本调用的批处理文件中有以下代码: "C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.exe" /t "D:xampphtdocsinstrumentappwebrootRepair Tickets%1.pdf"hnurenfp01Accounts_FS-1128MFP 参数%1是从PHP脚
我在使用 shell_exec()的 PHP脚本调用的批处理文件中有以下代码:

"C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.exe" 
/t "D:xampphtdocsinstrumentappwebrootRepair Tickets%1.pdf"
hnurenfp01Accounts_FS-1128MFP

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

观察到的行为:

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

预期行为:

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

解决方案失败:

>在批处理文件中使用TASKKILL在打印后结束AcroRd32.exe进程,但即使使用/ F(强制)标志,AcroRd32.exe仍保持打开状态.当我手动结束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时,打印作业应该完成,您可以终止剩余的过程.理论上无论如何:)

祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读