Ste*_*ane 4 pdf byte-order-mark
我在编写过滤程序时遇到问题.它通过读取文件的前5个字节并将其与固定缓冲区进行比较来检测文件是否为PDF文档:
25 50 44 46 2D
这工作正常,除了我看到一些以字节顺序标记开头的文件:
EF BB BF 25 50 44 46 2D
^-------^
我想知道PDF规范是否真的允许这样做.如果我查看该文档的第7.5节,我将其读作"否":
PDF文件的第一行应为包含5个字符%PDF的标题,后跟1.N形式的版本号,其中N是0到7之间的数字
然而,我在野外看到这些文档,用户感到困惑,因为PDF阅读器程序可以通过我的过滤器拒绝它们来打开这些文档.
那么:PDF文档开头是否允许BOM标记?(我不是在谈论字符串对象,而是PDF文件本身)
那么:PDF文档开头是否允许BOM标记?
不,就像你在规范中读到的那样,在"%PDF"字节之前不允许任何内容.
但Adobe Reader在接受文件方面有着悠久的历史,尽管有一些前导或尾随垃圾字节.
参看 Adobe pdf_reference_1-7附录H中的实施说明:
3.4.1,"文件头"
Acrobat查看器只需要标题出现在文件的前1024个字节内的某个位置.
Acrobat查看器也接受表单的标题
Run Code Online (Sandbox Code Playgroud)%!PS?Adobe?N.n PDF?M.m...
3.4.4,"文件预告片"
- Acrobat查看器仅需要
%%EOF标记出现在文件的最后1024个字节内的某个位置.
并且人们倾向于认为Adobe Reader根据需要显示的PDF是有效的,有许多PDF在野外预先有垃圾字节.