【问题标题】:PHP print to printer (local / network) directly (stuck in print spooler)PHP直接打印到打印机(本地/网络)(卡在打印后台处理程序中)
【发布时间】:2014-05-30 21:16:38
【问题描述】:

好的,我使用的是 PHP 5.4,我想直接从 Web 服务器打印到打印机。我正在使用 PHP 模块 php_printer.dll。

该功能运行良好。我在打印机队列中看到,数据在,但挂在状态“发送到打印机”

这里是代码

        $printerList = printer_list(PRINTER_ENUM_LOCAL);
        var_dump($printerList);
        $printerName = $printerList[0]['NAME'];
        echo $printerName;
        $printer = $printerName;
        if($ph = printer_open($printer)) {
           $content = "hello";

           // Set print mode to RAW and send PDF to printer
           printer_set_option($ph, PRINTER_MODE, "RAW");
           printer_write($ph, $content);
           printer_close($ph);
        }
        else "Couldn't connect...";

Apache 中的屏幕或日志文件没有错误,所以我假设 PHP 代码运行良好。我看到数据在 Windows 打印后台处理程序中。问题是它卡在那里,无法从打印机产生输出。

我认为问题是因为 windows 权限问题(我使用的是 windows 8,在 windows 7 或 XP 中测试也无法工作)。我有 4 台测试打印机:1. HP Laser Jet 401、2. PDF 打印机、3. Windows 传真、4. XPS 文档编写器。

我的电脑无法打印到所有 4 台打印机。我在另一台电脑上测试,可以打印到1号打印机,但是另一台不能。

状态仅为“已发送至打印机”。如果正在打印,则状态为“spooling”

我附上假脱机打印机中队列数据的屏幕截图。

这是成功后台处理程序的屏幕截图(我使用打印正常,ctrl+p 和打印进行测试)

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我很确定你不能不通过线轴。如果可以,如果您在前一个打印作业完成之前启动打印作业会发生什么?您最好调查一下打印作业卡在假脱机中的原因。
  • 嗨@GordonM,请参阅下面的回复

标签: php windows apache printing permissions


【解决方案1】:

我得到了答案,问题是你必须在开头添加这个

printer_start_doc($ph, "Start Doc");

还有这个在printer_close之前

printer_end_doc($ph);

没有开始和结束文档就无法打印。

我只是想知道为什么我仍然可以在其他计算机上打印到 1 号打印机,但不使用那个 start 和 end doc PHP 命令。

【讨论】:

  • 谢谢你!我也有这个问题......如果它有效,我会试试这个。 :)
  • 嗨,杰夫!你介意分享你的 php_printer.dll,我正在寻找互联网,但我没有得到正确的 dll。我正在使用服务器 windows 7 "wamp" php 版本 ~ 5.4.3 。请杰夫。
  • 这个方法可以打印pdf文件吗?
  • 我不确定,我试过一台pdf打印机可以,但另一台不能,理论上可以,但你可以试试:)
猜你喜欢
  • 2011-06-24
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2012-05-28
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多