【发布时间】:2012-03-11 02:10:03
【问题描述】:
我正在尝试通过 PHP 打印生成的表单/收据(打印机将安装在服务器上,我没有尝试打印到用户的本地打印机)。我决定尝试以下方法:
在 PHP 中:
- 生成 PDF 文件并将其保存在服务器上。
- 调用 perl 脚本来打印所述 PDF 文件。
在 perl 中:
- 使用
system()“打开”阅读器并静默打印给定的PDF。
什么有效:
- 我可以用 PHP 生成 PDF。
- 我可以调用 perl 脚本。
- 如果脚本有错误,它们会向浏览器窗口报告。即:如果我故意更改文件路径,它会失败,并报告适当的原因。
-
printf之类的函数似乎可以正常工作,因为输出会显示在浏览器中。 - 当从命令行或 IDE 执行时,完全相同的 perl 脚本(下面提到的“不起作用”行)可以正常工作。
什么不起作用:
- 在 perl 中:
system('"C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe" /N /T "C:\\test.pdf" 0-XEROX');
会发生什么:
- 什么都没有!我没有错误。它完全拒绝打开 Adobe Reader。此行下方的所有代码似乎都运行良好。这就像该功能被忽略了。我不知道为什么,但我确实尝试了一些方法。
我尝试过的:
- 将 AcroRd32.exe 的权限更改为
Everyone - Full Control。 - 在
system()调用之后输出$?。是1,但我不知道1在这种情况下是什么意思。 - 已验证 php 中没有列出
disable_functions(尽管我认为这无关,因为shell_exec似乎正在工作,因为运行了一些 perl 代码)。 - 各种其他配置至少让我可以确认 PHP 实际上正在调用 perl 脚本,它只是没有运行
system()调用。
其他信息:
- Apache 2.2.1.7
- PHP 5.35
- 为 MSWin32-x86-多线程构建的 Perl 5.12.3
- WampServer 2.1
我在这里不知所措,虽然这似乎是 Apache / 权限问题,但我不能确定。我对 Apache 的经验有限,我在网上找到的大部分是在我的环境中不起作用的 linux 命令。
【问题讨论】:
-
我不明白你为什么要打开阅读器。
-
实际命令为:
system('"C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe" /N /T "C:\\test.pdf" 0-XEROX');,其中 0-XEROX 为打印机名称。但是,嘿,我全神贯注于如何以另一种方式打印 PDF。编辑:我认为弄清楚如何使原始问题发挥作用通常很有价值,但我的最终目标是简单地打印 PDF,所以再次提供的任何帮助都会非常有用。 -
嗯,好的,现在我明白了。因此,您希望在网站上创建 PDF 时立即在打印机上打印它们。嗯,恐怕我帮不上忙。无论如何,改进证明你给我的完整命令行的问题。我投了赞成票,希望你能找到解决方案。
-
已编辑,感谢反馈!
-
我不熟悉 perl,所以我的问题是:为什么软件路径中有双 \?我认为,也许路径是造成问题的路径,您是否尝试过在
C:\AcroRd32.exe等更简单的路径中为AcroRd32.exe创建快捷方式