什么是直接从PHP打印(在我的情况下是现有的pdf)到局域网打印机的最佳方法?到目前为止,我一直没有成功地工作,但我不确定进一步追求的方向.我在Windows SBS 2008,PHP 5.3.9上运行Apache.
到目前为止我所知道的方法:
看起来这应该是一个简单的任务,有一个广泛接受的方法,但到目前为止,我没有找到它.谢谢!
这是一个很难破解的难题。我在 Ruby 的 Windows 打印方面有过自己的冒险经历,并提出了一些通过调用外部命令来工作的潜在解决方案,在 PHP 领域是system()或exec()(不要忘记escapeshellcmd()/ escapeshellarg()\xe2\x80\x94,它们倾向于让这件事变得更容易,尤其是在 Windows 上)。所有这些都假设 Windows 知道打印机并且可以通过名称引用它。
您实际上可以将文件重定向到网络打印机,例如:
\n\ncopy /b \\path\\to\\filename.pdf > \\\\Printer_Machine\\Printer_Queue\nRun Code Online (Sandbox Code Playgroud)\n\n该/b开关指定了一个二进制文件,但我 80% 确定现在不是严格的,\n 2012 年。
你可以尝试一下print命令:
print /d:\\\\Printer_Machine\\Printer_Queue \\path\\to\\filename.pdf\nRun Code Online (Sandbox Code Playgroud)\n\n\\d代表“设备”。我实际上还没有尝试过这个,而且我不确定它是否适用于 PDF,或者由于其 DOS 起源,仅适用于文本文件。
安装 Adobe Reader 并使用其命令行工具:
\n\nAcroRd32.exe /t \\path\\to\\filename.pdf "Printer Name" "Driver Name" "Port Name"\nRun Code Online (Sandbox Code Playgroud)\n\n我不确定您的服务器环境是否可以容纳 Reader,但这是我最成功的解决方案。您可以在此处找到\n文档\n(PDF,第 24 页)。Printer Name并且Driver Name应该与您在控制面板中\n打印机属性中看到的内容完全匹配。Port_Name我认为通常可以省略。
使用Ghostscript打印。我从未在 Windows 上尝试过此操作,但文档位于此处,并且此处有更多信息。\n命令如下所示:
\n\ngswin32.exe -sDEVICE=mswinpr2 -sOutputFile="%printer%Printer Name" \\path\\to\\filename.pdf\nRun Code Online (Sandbox Code Playgroud)\n\nmswinpr2指 Windows 自己的打印驱动程序(请参阅上面的第二个链接),\n“ %printer%”是文字且必需,并且“ Printer Name”应再次与控制面板中的打印机名称完全匹配。Ghostscript 有很多很多选项,\n您可能需要花一些时间配置它们。
最后,一般提示:您可以使用以下命令注册带有设备名称的网络打印机,net use例如:
C:\\> net use LPT2 \\\\Printer_Machine\\Printer_Queue /persistent:yes\nRun Code Online (Sandbox Code Playgroud)\n\n这应该可以让您使用LPT2或LPT2:代替\\\\Printer_...大多数命令。
我希望这有帮助!
\n| 归档时间: |
|
| 查看次数: |
8941 次 |
| 最近记录: |