10

直接从 php 打印到 LAN 打印机的最佳方法是什么(在我的情况下是现有的 pdf)?到目前为止,我一直没有成功地得到任何工作,但我不确定进一步追求的方向。我在 Windows SBS 2008 PHP 5.3.9 上运行 Apache。

到目前为止我所知道的方法:

  • shell_exec()
  • phpprintipp - 如果我能让它工作,这对我来说似乎是最好的方法
  • php_printer.dll -当前不存在 dll

看起来这应该是一个具有广泛接受方法的简单任务,但到目前为止我还没有找到它。谢谢!

4

2 回答 2

4

这是一个难以破解的难题。我在 Ruby 的 Windows 打印方面有过自己的冒险经历,并提出了一些潜在的解决方案,这些解决方案通过调用外部命令来工作,在 PHP 领域是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 或仅适用于 PDF,由于它的 DOS 起源,文本文件。

  3. 安装 Adob​​e Reader 并使用它的命令行工具:

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

    我不确定您的服务器环境是否可以容纳 Reader,但这是我最成功的解决方案。您可以在此处找到 文档 (PDF,第 24 页)。Printer Name并且Driver Name应该与您在控制面板中的打印机属性中看到的完全匹配。Port_Name我认为通常可以省略。

  4. 使用Ghostscript打印。我从来没有在 Windows 上尝试过,但是 文档在这里 ,这里有 更多信息。命令是这样的:

    gswin32.exe -sDEVICE=mswinpr2 -sOutputFile="%printer%Printer Name" \path\to\filename.pdf
    

    mswinpr2指的是 Windows 自己的打印驱动程序(请参阅上面的第二个链接),“ %printer%”是字面的并且是必需的,“ Printer Name”应该再​​次与控制面板中的打印机名称完全匹配。Ghostscript 有很多很多选项,您可能需要花一些时间来配置它们。

最后,一般提示:您可以使用以下命令注册具有设备名称的网络打印机,net use例如:

C:\> net use LPT2 \\Printer_Machine\Printer_Queue /persistent:yes

应该让您使用LPT2LPT2:代替\\Printer_...大多数命令。

我希望这会有所帮助!

于 2012-05-21T22:33:53.893 回答
3

不确定这是否适用于所有打印机,但这可以完成将 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);
?>
于 2015-12-15T15:47:47.597 回答