ESCPOS-php для печати в XPS Document Writer

Я пытаюсь вывести файл XPS с помощью Microsoft XPS Writer из Php с найденной библиотекой записи термопринтера ESCPOS-php здесь, написанный 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 document writer? Я использую ОС Windows. В частности, Windows 7.


person Malcolm Salvador    schedule 18.02.2016    source источник


Ответы (1)


Непосредственная ошибка вызвана тем, что gzdecode () не существует. Он доступен на PHP> 5.4. Если вы обновите или установите плагин zlib, ваш фрагмент кода создаст файл с именем Microsoft XPS Document Writer в текущем каталоге и сохранит в нем некоторые команды.

Если вы не используете LPT1 в качестве своего принтера, escpos-php фактически печатает в Windows по сети, поэтому вам нужно предоставить общий доступ к принтеру и использовать его URL-адрес для печати. Вот несколько примеров этого здесь:

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

Однако я был бы удивлен, если бы средство записи документов XPS понимало бинарные команды (ESC / POS), которые генерирует escpos-php, и не было бы бесплатных инструментов (которые я знаю) для рендеринга команд 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();
}
person mike42    schedule 20.02.2016