2

我有一个通过 tcp/ip 接收打印机数据的服务。收到数据后,是否有可靠、有效的方法来检查数据流并确定数据是 PostScript 还是 PCL 数据?例如,我可以在数据流的开头查找哪些字符来指示格式?

4

4 回答 4

1

我可能只会计算文件中转义字符的数量。PCL 将拥有它们。后记将有大量的 % 符号。这不是一个完美的解决方案,但它非常简单,我敢打赌它实际上会非常可靠。

我能看到的唯一“真实”方法是实际解析 PCL 并解析 postscript 并查看哪个有效。

于 2012-08-06T18:38:07.147 回答
1

我会加我的 2 美分。

就像其他人在这里提到的那样,您第一次尝试以编程方式识别文档是查看前两个字符。如果它以 开头%!,则它是 PostScript,如果它以转义字符(hex 1B、oct 033、ascii 27)开头,因为 PCL 很可能会以 PCL 命令开头,那么它就是 PCL。这可能会解决您需要处理的 99% 的文档。如果仍然不知道,那么您可以在文档中搜索showpage细绳。如果它是 PostScript,它必须有一个显示页面来呈现页面。如果找不到,并且文件中有转义字符,则知道它是PCL,如果没有显示页面,并且没有转义字符,则可以在PCL一侧出错,因为原始文本文件是有效的 PCL,打印机可以在它们出现时将其清除。

于 2012-08-08T17:33:29.207 回答
0

Postscript 数据必须以“%!ps”或“%!PS”开头——它可能是一个更长的可读字符串,如“%!PS-Adobe-3.0”——但基本上就是这样。

很可能 PCL 有类似的签名——我记得过去见过。

于 2012-04-11T17:56:14.843 回答
0

根据PCL 5 General Printing FAQs PCL 文件应以 ESC "E" 开头。我假设必须遵循另一个 ESC 序列。所以我的猜测是以字节 1B 45 1B 开头的文件很可能是 PCL 文件。这会使不符合此规则的 PCL 文件无法识别。

在我的用例中,macOS 总是在开头生成带有 ESC E 的 PCL。

于 2021-04-24T15:37:28.367 回答