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