ESCPOS-php 打印到 XPS 文档编写器

ESCPOS-php to print to XPS document writer

我正在尝试使用来自 Php 的 Microsoft XPS Writer 和发现 here 的 ESCPOS-php 热敏打印机编写器库输出 XPS 文件,写入作者 Mike42,在不浪费收据纸的情况下测试打印收据。

我已将当前打印机设置为 "Microsoft XPS Document Writer",并包含了我的 php 网站中提到的库。

我尝试打印此网页(名为 'p1PrinterSolution')

function letsPrint()
            {
                require_once(dirname(__FILE__) . "/escpos-php-master/Escpos.php");
                $connector = new FilePrintConnector("Microsoft XPS Document Writer");
                $printer = new Escpos($connector);              
                $printer -> text("Hello World!\n");
                $printer -> cut();
                $printer -> close();

            }
            #let's call the function now kid!
            letsPrint();

但是,我收到了这个错误:

Fatal error: Call to undefined function gzdecode() in (the location of escpos-php) on line 173

如果我尝试在不声明连接器的情况下调用 $printer = new Escpos();,则会收到此错误消息:

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Argument passed to Escpos::__construct() must implement interface PrintConnector, null given.' in (path)\escpos-php-master\Escpos.php:176 Stack trace: #0 (path)\p1PrinterSolution.php(62): Escpos->__construct() #1 {main} thrown in (path)\escpos-php-master\Escpos.php on line 176

如何设置 ESCPOS-php 以正确打印到 xps 文档编写器? 我正在使用 windows OS。 Windows 特别是 7。

直接错误是gzdecode()不存在造成的。它在 PHP > 5.4 上可用。如果您升级或安装 'zlib' 插件,您的代码片段将在当前目录中创建一个名为 'Microsoft XPS Document Writer' 的文件,并向其中保存一些命令。

除非您使用 'LPT1' 作为您的打印机,否则 escpos-php 实际上会通过网络在 Windows 上打印,因此您需要共享您的打印机并使用其 URL 打印。有一些这样的例子 here:

$connector = new WindowsPrintConnector("smb://localhost/Microsoft XPS Document Writer");

但是,如果 XPS 文档编写器理解 escpos-php 生成的二进制命令 (ESC/POS),并且没有免费的渲染工具(我知道),我会感到惊讶ESC/POS 计算机上的命令来检查您的工作。所以这意味着你需要浪费一些收据纸来制作测试收据。

作为呈现收据的另一种方式,您可以通过其他方式创建 PDF 文件,escpos-php 可以将其转换为图像以进行打印(通过 Imagick PHP 延期)。这会大大减慢打印速度,但在您还需要通过电子邮件向客户发送收据或希望能够使用激光打印机的情况下很有用。

print-from-pdf.php 示例为此显示了 API,我在下面对其进行了调整以打印到 LPT1

<?php
require __DIR__ . '/vendor/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\ImagickEscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;

$pdf = 'resources/document.pdf';
$connector = new WindowsPrintConnector("LPT1");
$printer = new Printer($connector);
try {
    $pages = ImagickEscposImage::loadPdf($pdf);
    foreach ($pages as $page) {
        $printer -> graphics($page);
    }
    $printer -> cut();
} catch (Exception $e) {
  /*
     * loadPdf() throws exceptions if files or not found, or you don't have the
     * imagick extension to read PDF's
     */
    echo $e -> getMessage() . "\n";
} finally {
    $printer -> close();
}