2016-02-18 2 views
2

Я пытаюсь вывести файл XPS с помощью Microsoft XPS Writer из Php с библиотекой-носителем термопринтера ESCPOS-php, найденной here, написанной Mike42, для проверки квитанций на печать без потери поступления бумага.ESCPOS-php для печати в документе документа XPS

Я установил текущий принтер в «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(); 

Однако я receving этой ошибки:

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. Windows 7 в частности.

ответ

1

Сразу же возникла ошибка 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 понимает двоичные команды (ESC/POS), что escpos-PHP генерирует, и нет свободных инструментов (я знаете) для отображения команд ESC/POS на компьютере, чтобы проверить вашу работу. Таким образом, это означает, что вам нужно будет растратить какую-либо бумажку для получения тестовых квитанций.

В качестве альтернативного способа рендеринга квитанций вы можете создавать PDF-файлы с помощью других средств, которые escpos-php может преобразовывать в изображение для печати (через расширение PHP Imagick). Это значительно замедляет печать, но пригодится в ситуациях, когда вам нужно также отправлять квитанции по электронной почте клиентам, или вы хотите отказаться от лазерного принтера.

В примере 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(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^