直接从php打印(在我的情况下是现有的pdf(到LAN打印机的最佳方法是什么? 到目前为止,我还没有成功地让任何事情发挥作用,但我不确定进一步追求什么方向。 我在Windows SBS 2008,PHP 5.3.9上运行Apache。
到目前为止,我所知道的方法:
- shell_exec((
- phpprintipp - 如果我能让它工作,这对我来说似乎是最好的方法
- php_printer.dll - 当前不存在 DLL
似乎这应该是一项具有广泛接受方法的简单任务,但到目前为止我还没有找到它。 谢谢!
这是一个很难破解的难题。我自己在 Ruby 的 Windows 打印方面有过自己的冒险经历,并提出了一些通过调用外部命令来工作的潜在解决方案,在 PHP-land 中,外部命令是system()
或exec()
(不要忘记 escapeshellcmd()
/escapeshellarg()
- 它们倾向于使这些东西更容易,尤其是在 Windows 上(。他们都假设Windows知道打印机,并且可以按名称引用它。
-
从字面上看,您只需将文件重定向到网络打印机,例如:
copy /b 'path'to'filename.pdf > ''Printer_Machine'Printer_Queue
/b
开关指定了一个二进制文件,但我 80% 确定它现在不是严格意义上的,2012年。 -
您可以尝试
print
命令:print /d:''Printer_Machine'Printer_Queue 'path'to'filename.pdf
'd
代表"设备"。我还没有真正尝试过这个,我不确定它是否适用于PDF或仅由于其DOS起源的文本文件。 -
安装 Adobe Reader 并使用其命令行功能:
AcroRd32.exe /t 'path'to'filename.pdf "Printer Name" "Driver Name" "Port Name"
我不确定您的服务器环境是否可以容纳 Reader,但这是我最成功的解决方案。你可以找到文档在这里"(PDF,第24页(。
Printer Name
和Driver Name
应与您在控制面板中的打印机属性。 我认为,Port_Name
通常可以省略。 -
使用代笔打印。我从来没有试过这个窗户,但文档在这里还有更多信息在这里。这命令是这样的:
gswin32.exe -sDEVICE=mswinpr2 -sOutputFile="%printer%Printer Name" 'path'to'filename.pdf
mswinpr2
指的是Windows自己的打印驱动程序(请参阅上面的第二个链接(,"%printer%
"是字面和必需的,"Printer Name
"应该再次匹配控制面板中的打印机名称。代笔有很多很多选项和您可能需要花一些时间来配置它们。
最后,一般提示:您可以使用net use
命令注册具有设备名称的网络打印机,例如:
C:'> net use LPT2 ''Printer_Machine'Printer_Queue /persistent:yes
这应该允许您使用 LPT2
或 LPT2:
代替大多数命令的''Printer_...
。
我希望对您有所帮助!
不确定这是否适用于所有打印机,但这可以完成将 ZPL 文件发送到 Zebra 标签打印机的工作:
<?php
if(($conn = fsockopen('192.168.10.112',9100,$errno,$errstr))===false){
echo 'Connection Failed' . $errno . $errstr;
}
$data = <<<HERE
^XA
^FT50,200
^A0N,200,200^FDTEST^FS
^FT50,500
^A0N,200,200^FDZebra Printer^FS
^XZ
HERE;
#send request
$fput = fputs($conn, $data, strlen($data));
#close the connection
fclose($conn);
?>