ESCPOS-php для печати в XPS 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 writer? Я использую ОС Windows. Windows 7 в частности.
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 Document понимает двоичные команды (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();
}