3

それで、私は印刷の問題についてたくさん読んできました。数日間の調査とたくさんの読書の後、すべてが理にかなっています。私がこのコードを持っているとしましょう:(私はphpとphp_printer拡張機能を使用しています)

$boldon = chr(27)."E".chr(1);
$boldoff = chr(27)."E".chr(0);
$pcenter = chr(27)."a".chr(1);
$pleft = chr(27)."a".chr(0);
$handle = printer_open("Generic / Text Only File");
printer_set_option($handle, PRINTER_MODE, "RAW");
printer_write($handle, $boldon.$pcenter."Some text");
printer_write($handle, "\n");
printer_write($handle, "Some more text");
printer_write($handle, "\n");
printer_close($handle);

ローカルホストで実行すると、それは素晴らしく機能します。私はサーマルプリンターを使用していますが、うまく印刷されます。サーバーでこれを試してみると(今では完全に理にかなっています)、これは機能しません。実際のサーバーがローカルで印刷しようとしてプリンターが見つからないためだと思います。プリンターがサーバーにインストールされていれば、サーバーのプリンターで印刷されると思いますが、それは私が探しているものではありません。

情報をhtmlまたは任意の並べ替えで表示してwindow.print()を使用しても、ブラウザはテキストのみを送信せず(またはそれを何度も読んだものです)、一般的なテキストのみを送信し、テキストのみを印刷するため(推測しています)、役に立ちません.

したがって、解決策は、ESC/P でテキストを含む何らかのファイルを作成し、それを javascript で印刷することです (他のスレッドで言及されているように、印刷ダイアログをスキップする必要はありません)。ドライバーを変更することはできません。 、一般的なテキストのみである必要があります。したがって、必要な情報を含む .txt ファイルを作成すると印刷されますが、ESC/P は無視されるため、テキストを書式設定することはできません。デフォルトのプリンター オプションで印刷され、すべてプレーンで送信されます。新しい行とESC / Pのすべての部分を無視するテキスト(皮肉)。

ここでの質問は、必要なテキストを送信し、ESC/P を無視しないファイル (任意の種類のファイル) を作成する方法はありますか?

4

1 に答える 1

1

バイナリファイルを作成する方法があります。つまり、文字列を作成し、バイナリ ファイルのように送信し、ダウンロードしてから、好きなものを印刷します。

$output= chr(27)."a".chr(1)."Some text"; // what you like to print

// headers to send file
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: application/octet-stream"); // send it like binary file
header("Content-Disposition: attachment; filename=\"print\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($output));
echo $output;
exit();

しかし、ブラウザでバイナリデータを印刷できるとは思いません。

別の解決策は、プロキシからプリンターへのようなローカル ソフトウェア (サーバー) を使用することです。

  • リモートサーバーがデータをローカルサーバーに送信し、ローカルサーバーがデータをプリンタードライバーに送信します

また

  • ローカルサーバーがリモートサーバーからデータを要求し、それを印刷します
于 2014-03-20T15:33:55.210 に答える