11

このZebraZM400プリンターをネットワークに接続しています(192.168.1.50)。そして、PHPから直接このプリンターにコンテンツをプッシュしようとしています。

これはアイデアであり、私はこれを行う方法がないまま立ち往生しています。私は試しましたfile_put_contents('192.168.1.50', $content)が、成功しませんでした。

誰かがこれを整理するのを手伝ってくれたら幸いです。ありがとうございました :-)

.................................................。 .................................................。 ............................。

解決:

LPRプロトコルを使用して印刷しました。ドライバなどをインストールする必要はありません。PHP 5のLPR印刷クラスは、次の場所からダウンロードできます。

http://www.phpclasses.org/package/2540-PHP-Abstraction-for-printing-documents.html

4

9 に答える 9

15

印刷ドライバーなしでゼブラプリンターに印刷するために Java プログラムを使用していた同様の問題があり、PHP を使用してこれを再作成したいと考えていました。答えが見つからないことに悩まされていました。Wireshark でパケット キャプチャを行い、2 つを比較した結果、可能であると感じました。私はついに解決策に出くわしました(少なくとも私にとっては)。これにより、ドライバーを必要とせずに、PHP ページから直接ネットワーク化された Zebra プリンターにラベルが印刷されます。

<?php
error_reporting(E_ALL);

/* Get the port for the service. */
$port = "9100";

/* Get the IP address for the target host. */
$host = "172.17.144.89";

/* construct the label */
$mrn = "123456";
$registration_date = "03/13/2013";
$dob = "06/06/1976";
$gender = "M";
$nursing_station = "ED";
$room = "ED01";
$bed = "07";
$lastname = "Lastname";
$firstname = "Firstname";
$visit_id = "12345678";

$label = "q424\nN\n";
$label .= "A10,16,0,3,1,1,N,\"MR# " . $mrn . " ";
$label .= $registration_date . "\"\n";
$label .= "B10,43,0,3,2,4,50,N,\"" . $mrn . "\"\n";
$label .= "A235,63,0,3,1,1,N,\" ";
$label .= $dob . " ";
$label .= $gender . "\"\n";
$label .= "A265,85,0,3,1,1,N,\" ";
$label .= $nursing_station . " ";
$label .= $room . "-";
$label .= $bed . "\"\n";
$label .= "A10,108,0,3,1,1,N,\"";
$label .= $lastname . ",";
$label .= $firstname;
$label .= "\"\n";
$label .= "A10,135,0,3,1,1,N,\" #" . $visit_id . "\"\n";
$label .= "B10,162,0,3,2,4,50,N,\"" . $visit_id . "\"\n";
$label .= "P1\n";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error    ()) . "\n";
} else {
    echo "OK.\n";
}

echo "Attempting to connect to '$host' on port '$port'...";
$result = socket_connect($socket, $host, $port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror    (socket_last_error($socket)) . "\n";
} else {
    echo "OK.\n";
}

socket_write($socket, $label, strlen($label));
socket_close($socket);

?>
于 2013-04-11T19:05:46.610 に答える
3

LPRとFTPを使用したソリューションが得られたようですが、Zebraプリンターはポート9100で生のZPLテキストを受け入れるとほぼ確信しています。

于 2012-05-18T20:56:02.923 に答える
3

これは、ネットワークに接続された Zebra プリンタで印刷する方法です: プリンタが IP: 192.168.1.50 および標準ポート: 9100 にあると仮定します。

<?php 
if(($conn = fsockopen('192.168.1.50',9100,$errno,$errstr))===false){ 
    echo 'Connection Failed' . $errno . $errstr; 
} 

$data = ' 
    ^XA 
    ^FT50,200 
    ^A0N,200,200^FDTEST^FS 
    ^FT50,500 
    ^A0N,200,200^FDZebra Printer^FS 
    ^XZ'; 

#send request 
$fput = fputs($conn, $data, strlen($data)); 

#close the connection 
fclose($conn); 
?> 

これは、Zebra だけでなく、ZPL 互換プリンタで 100% 動作します。この例では、大きなTEST ZEBRA PRINTERを含むラベルを印刷します。

于 2019-02-25T10:50:49.407 に答える
2

テキストコンテンツをソケットにプッシュするだけでは、まったく機能しないと確信しています。

あなたはlprの上に印刷する必要があるでしょう私の推測です。CUPSのようなプリントサーバーをインストールすると、それを使用して送信できます...

于 2010-09-22T04:11:45.180 に答える
2

後で?...

シリアルポートにアクセスできる場合:

Linux:

 $fpi = fopen('/dev/ttyS0', 'r+');


$comando = "
N
Q70
A40,20,0,2,1,0,N,\"xxx\"
B40,40,0,1,2,6,100,N,\"$don\"
A40,145,0,3,1,0,N,\"N.- $don \"
A40,165,0,2,1,0,N,\"ccc\"
A0,198,7,1,1,0,N,\"$fecha\"
A19,198,7,1,1,0,N,\"fasdfas\"
P
";
fwrite($fpi, $comando);

fclose($fpi);


  • これは正常に動作します
于 2012-05-11T19:04:05.727 に答える
1

ゼブラ言語でファイルを作成し、過去に何度も FTP を使用してファイルを送信しました。ファイルを保存し、プリンターへの ftp 接続を作成してから、put コマンドを使用して .txt ファイルを送信します。あとはプリンターがやってくれます

于 2012-05-18T20:47:06.847 に答える
0

ZPL を Zebra プリンタに直接送信する方法のサンプル コードが次の場所にあります。

https://km.zebra.com/kb/index?page=content&channel=SAMPLE_CODE&cat=ZISV_PL_ZPL

PHP では何も表示されませんでしたが、VB を使用してポート 9100 経由でプリンターと直接通信する例があります。

于 2013-01-31T00:22:31.900 に答える
-2

これらのPHPプリンター関数を見てください

ご了承ください

これらの機能は、Windows 9.x、ME、NT4、および 2000 でのみ使用できます。

于 2010-09-22T04:16:58.060 に答える