从 PHP 打印到网络打印机


Print to network printer from PHP

直接从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知道打印机,并且可以按名称引用它。

  1. 从字面上看,您只需将文件重定向到网络打印机,例如:

    copy /b 'path'to'filename.pdf > ''Printer_Machine'Printer_Queue
    

    /b开关指定了一个二进制文件,但我 80% 确定它现在不是严格意义上的,2012年。

  2. 您可以尝试print命令:

    print /d:''Printer_Machine'Printer_Queue 'path'to'filename.pdf
    

    'd代表"设备"。我还没有真正尝试过这个,我不确定它是否适用于PDF或仅由于其DOS起源的文本文件。

  3. 安装 Adobe Reader 并使用其命令行功能:

    AcroRd32.exe /t 'path'to'filename.pdf "Printer Name" "Driver Name" "Port Name"
    

    我不确定您的服务器环境是否可以容纳 Reader,但这是我最成功的解决方案。你可以找到文档在这里"(PDF,第24页(。 Printer NameDriver Name应与您在控制面板中的打印机属性。 我认为,Port_Name通常可以省略。

  4. 使用代笔打印。我从来没有试过这个窗户,但文档在这里还有更多信息在这里。这命令是这样的:

    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

应该允许您使用 LPT2LPT2: 代替大多数命令的''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);
?>