tcp/ip経由でプリンターデータを受信するサービスがあります。データを受信したときに、データストリームを調べて、データがPostScriptデータかPCLデータかを判断するための信頼できる効率的な方法はありますか?たとえば、フォーマットを示すためにデータストリームの先頭で探すことができる文字はありますか?
4 に答える
おそらく、ファイル内のエスケープ文字の数を数えるだけです。PCLにはそれらのゴブがあります。Postscript には % 記号のゴブがあります。これは完全な解決策ではありませんが、非常にシンプルであり、実際には非常に信頼できると確信しています。
これを行うことができる唯一の「実際の」方法は、実際に PCL を解析し、postscript を解析して、どちらが機能するかを確認することです。
2¢追加します。
他の人がここで述べたように、プログラムでドキュメントを識別するための最初の試みは、最初の 2 文字を調べることです。で始まる場合%!
は PostScript です。エスケープ文字 (hex 1B
、 oct 033
、 ascii 27
) で始まる場合は、PCL が PCL コマンドで始まる可能性が非常に高いため、PCL です。これにより、処理が必要なドキュメントの 99% が解決される可能性があります。それでも不明な場合は、ドキュメントを検索して、showpage
ストリング。PostScript の場合、ページをレンダリングするための showpage が必要です。エスケープ文字が見つからず、ファイルにエスケープ文字が含まれている場合は、それが PCL であることがわかります。showpage がなく、エスケープ文字がない場合は、PCL 側でエラーになる可能性があります。ファイルは有効な PCL であり、プリンターはそれらが来るとそれらを吹き飛ばすことができます。
Postscript データは "%!ps" または "%!PS" で始まらなければなりません - "%!PS-Adobe-3.0" のようにもっと長い読みやすい文字列かもしれませんが、基本的にはこれです。
ほとんどの場合、PCL は同様の署名を持っています。過去に見た覚えがあります。
PCL 5 General Printing FAQsによると、PCL ファイルは ESC "E" で始まる必要があります。別の ESC シーケンスが続く必要があると思います。したがって、バイト 1B 45 1B で始まるファイルは PCL ファイルである可能性が最も高いと思います。これにより、この規則に従わない PCL ファイルが認識されなくなります。
私の使用例では、最初に ESC E で常に PCL を生成するのは macOS です。