我有一个通过tcp / ip接收打印机数据的服务。收到数据后,是否有可靠,有效的方法来检查数据流并确定数据是PostScript还是PCL数据?例如,我可以在数据流的开头找到哪些字符来表示格式?
答案 0 :(得分:1)
我会添加2¢。
就像其他人在这里提到的那样,你以编程方式识别文档的第一步就是查看前两个字符。如果它以%!
开头,那么它是PostScript,如果它以转义字符(十六进制1B
,oct 033
,ascii 27
)开头,很可能PCL将启动使用PCL命令,然后是PCL。这可能会解决您需要处理的99%的文档。如果仍然未知,则可以在文档中搜索showpage
字符串。如果是PostScript,则必须有一个showpage来呈现页面。如果你找不到一个,如果文件中有任何转义字符,你知道它是PCL,你可以在PCL一边犯错,如果没有showpage,并且没有转义字符,因为原始文本文件是有效的PCL,打印机可以随时将它们打开。
答案 1 :(得分:0)
后记数据必须以"%!ps"开头。或"%!PS" - 它可能是一个更长的可读字符串,如"%!PS-Adobe-3.0" - 但基本上就是这个。
很可能PCL有类似的签名 - 我记得过去曾经看过它。
答案 2 :(得分:0)
我可能只计算文件中的转义字符数。 PCL将拥有它们。后记将有%的迹象。这不是一个完美的解决方案,但它很简单,我敢打赌它实际上是非常可靠的。
我能看到的唯一“真实”方式是实际解析PCL并解析后记,看看哪个有效。
答案 3 :(得分:0)
根据 PCL 5 General Printing FAQs PCL 文件应以 ESC "E" 开头。我假设必须遵循另一个 ESC 序列。所以我的猜测是以字节 1B 45 1B 开头的文件很可能是 PCL 文件。 这会使不符合此规则的 PCL 文件无法识别。
在我的用例中,始终以 ESC E 开头的 macOS 生成 PCL。