2

通常のテキストとして印刷されたエスケープコード(つまり、printerコマンド)を受け入れることができるプリンターを扱っています。

たとえば、プレーンテキストファイルを作成して「〜TR%10 10 20 20?」と書くと、次にこれを印刷すると、プリンタはそれをコマンドとして認識し、そのビットのテキストを用紙に印刷しません。

ポストスクリプトファイル( PSモジュールを使用してPHPから作成)を介してこれを実行しようとすると、プリンターにコマンドと同じテキストを認識させることができません。代わりに、紙に印刷されます。

このテキストビットがそのままプリンタに送信されるようにするために使用できるPSコマンド/フォーマットはありますか?

ありがとう

更新: PDFファイルでも(PHP + TCPDFを使用して)試してみましたが、どちらもうまくいきませんでした。

更新2:サンプルコードの追加

$ps = ps_new();

ps_open_file($ps, '/var/www/data/test.ps');

ps_set_info($ps, 'BoundingBox', '0 0 1011 638');
ps_set_info($ps, 'Orientation', 'Landscape');
ps_set_info($ps, "Creator", "PHP");
ps_set_info($ps, "Title", "Test");
ps_set_info($ps, "Keywords", "test");

ps_begin_page($ps, 1011, 638);
ps_set_parameter($ps, 'SearchPath', '/var/www/data/font');
$psfont = ps_findfont($ps, "ARIALN_0", "", 1); // Arial Narrow font
ps_setfont($ps, $psfont, 10.0);

ps_show_xy($ps, "ABC", 10, 10);
ps_show_xy($ps, "~TR%41 4 53 11?", 10, 50);

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

header('Content-type: application/postscript');
header('Content-Disposition: attachment; filename="test.ps"');

readfile('/var/www/data/test.ps');
4

2 に答える 2

4

私はPHPについて何も知りませんが、あなたは確かに使いたくないでしょうps_show_x_y. これは間違いなくshow、印刷されたページにテキストを表示するポストスクリプト オペレーターに対応します。

ドキュメントから、ps_include_fileあなたが望む方法のようです。すべての ps_module をバイパスして、ファイルに直接書き込むだけです。Ken が言うように、プリンターに認識させたい場合は、他のすべての PostScript コードの前に配置する必要があります。特に、マジック ナンバー「%!」の前にある必要があります。プリンタがポストスクリプト プログラムを検出し、適切なモードに入るために使用します。

もちろん、これを行うと、ps ファイルは移植できなくなります。gs、distiller、その他の印刷業者のいずれも、これを PostScript ドキュメントとして受け入れたくないでしょう。

ジョージがコメントで言及しているように、この制御コードが行う可能性があるものは何でも(まだ開示していません)、ポストスクリプト側からも利用できる可能性があります。やるべきことは、プリンターの PPD ファイルを見つけることです (Postscript Printer Definition)。このファイルには、プリンター固有のタスクを実行するための Postscript スニペットが含まれています。プログラムで解析できるように、大量の DSC コメントと一見奇妙なフォーマットが装備されていますが、必要なスニペットが実際に利用可能であると仮定すると、これらすべてにより、必要なスニペットを簡単に見つけることができます。

于 2013-01-17T08:05:45.227 に答える
2

これがうまくいく方法がわかりません。プリンタは、PostScriptを解釈していないときにランダムなエスケープ文字を処理できる場合がありますが、PostScriptインタプリタに入ると、確かに処理できなくなります。

これは、PostScriptプログラムの本体に(エスケープ文字と一致する)バイナリデータを含めることが完全に可能であるためです。代わりに、プリンター入力ハンドラーがそのデータを処理した場合、PostScriptは機能しません。

したがって、PostScriptインタープリターを開始する前、または完了後にエスケープコードをプリンターに送信する必要があります。途中で送信することはできません。

于 2013-01-17T08:00:48.723 に答える