2

Mike42によって書かれた ESCPOS-php サーマル プリンター ライター ライブラリを Php から Microsoft XPS Writer を使用して XPS ファイルを出力し、レシート用紙を無駄にすることなく印刷レシートをテストしています。

現在のプリンターを「Microsoft XPS Document Writer」に設定し、PHP Web サイトに記載されているライブラリを含めました。

この Web ページ (「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

xps ドキュメント ライターに正しく出力するように ESCPOS-php をセットアップするにはどうすればよいですか? Windows OS を使用しています。特にWindows 7。

4

1 に答える 1

1

即時エラーは、gzdecode()が存在しないために発生します。PHP > 5.4 で利用できます。「zlib」プラグインをアップグレードまたはインストールすると、コード スニペットによって現在のディレクトリに「Microsoft XPS Document Writer」というファイルが作成され、いくつかのコマンドが保存されます。

プリンターとして「LPT1」を使用しない限り、escpos-php は実際にはネットワーク経由で Wi​​ndows に印刷されるため、プリンターを共有し、その URL を使用して印刷する必要があります。ここにいくつかの例があります:

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

ただし、XPS ドキュメント ライターが escpos-php が生成するバイナリ コマンド (ESC/POS) を理解していて、コンピューター上で ESC/POS コマンドをレンダリングして作業を確認するための無料のツール (私が知っている) がない場合は驚くでしょう。 . したがって、これは、テスト レシートを作成するためにレシート用紙を無駄にする必要があることを意味します。

レシートを表示する別の方法として、他の方法で PDF ファイルを作成できます。この 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();
}
于 2016-02-20T03:06:31.167 に答える