0

ゼブララベルプリンターでラベルにバーコードを印刷したいのですが、バーコードプリンターの型式はゼブラ GK420d です。ステッカー印刷領域は 5 cm x 10 cm です。PHP スクリプトから実行したいです。グーグルでいくつかの例を見つけ、このように実装しました。

$barcode = "sometext";
$labelcode =<<<AAA
^XA
^FO100,75
^BCN, 100,Y, N,
^FD$barcode^FS
^XZ
AAA;

file_put_contents('/dev/lpt1',$labelcode);

プリンターを接続してテストすると動作しますか?印刷するためにこのゼブラ プリンターに適用する必要がある設定は何ですか?ゼブラ プリンターの設定についてはわかりません。また、file_put_contents を使用してコードをプリンターにコピーします。ポート。システムに接続されているプリンターのポートを見つける方法。USB の場合、file_put_contents に渡す必要がある情報。ゼブラ印刷プロセスを提案してください。

4

1 に答える 1

6

仮に未加工の ZPL / EPL コマンドをプリンター デバイスに送信することもできますが、ZPL / EPL をまだ知らず、環境で既にイメージを生成できる場合は、送信しない方がよいでしょう。

あなたのコードは、あなたが Unix ライクなシステムを使用していることを暗示しています。最近のUnix ライクなシステムを使用している場合、印刷はCUPSで制御する必要があります。Zebra は、サポートされていないがほとんど機能する CUPS サポート ファイルを公開しています。

CUPS でプリンターをセットアップしてから、プリンター名に設定され/usr/bin/lp-dフラグ、プリンター-o ppi=...の DPI を設定する値、および位置合わせまたは縦向き/横向きモードを強制するその他のものを使用してシェルアウトします。その GK420s は 203 DPI のプリンターなので、 -o ppi=203最低限必要です。

その後、画像や PDF ドキュメントなど、CUPS が認識できるプリンターで何でも印刷できます。これにより、プリンターが理解できるコマンド言語に制限されることなく、PHP 側で必要なものを合成できます。たとえば、wkhtmltoimageを使用して配送ラベルを作成し、GD と PEAR の先史時代のImage_Barcodeを使用して小さなバーコード ラベルを作成します。ところで、それにはより良いオプションがあります。

または、CUPS で「Generic Raw」仮想プリンターをセットアップすることもできます。その後、コマンド言語のテキスト ファイルをそのプリンターから直接印刷できます。おそらく、EPL または ZPL に慣れていて慣れている場合にのみ、この方法を使用する必要があります。

次のコードは、Zebra を含むすべてのプリンターで印刷するために使用する、実際のライブ コードの一部を抜粋したものです。最初の引数として、印刷したいデータ (画像やテキストなどの内容など) を指定して以下の関数を呼び出すだけです。

function print_example($data) {
// You'll need to change these according to your local names and options.
    $server = 'printserver.companyname.com';
    $printer_name = 'Zebra_ZP_500_KB'; // That's effectively the same thing as your GK420d
    $options_flag = '-o position=bottom-left,ppi=203,landscape';
    $process_name = 'LC_ALL=en_US.UTF-8 /usr/bin/lp -h %s -d %s %s';
    $command = sprintf($process_name, $server, $printer_name, (string)$options_flag);
    $pipes = array();
    $process = proc_open($command, $handles, $pipes);
// Couldn't open the pipe -- shouldn't happen
    if (!is_resource($process))
        trigger_error('Printing failed, proc_open() did not return a valid resource handle', E_USER_FATAL);
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// As we've been given data to write directly, let's kinda like do that.
    fwrite($pipes[0], $data);
    fclose($pipes[0]);
// 1 => readable handle connected to child stdout
    $stdout = fgets($pipes[1]);
    fclose($pipes[1]);
// 2 => readable handle connected to child stderr
    $stderr = fgets($pipes[2]);
    fclose($pipes[2]);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
    $return_value = proc_close($process);
// We've asked lp not to be quiet about submitting jobs so we can make
// sure that the print job was submitted.
    $request_match = array();
    if (!preg_match('/request id is\b(.+)/', $stdout, $request_match)) {
        add_warning("Print to '$printer' failed.  Please check the printer status.");
        return false;
    }
    add_notice("Print to '$printer' succeeded.  Job $request_match[1].");
    return true;
}

関数add_warningadd_noticeはコードに実装されているため、実際に印刷するものに合わせて適切に置き換える必要があります。

于 2013-11-29T23:07:29.823 に答える