PDF文档中是否允许字节顺序标记?

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文件本身)

mkl*_*mkl 8

那么:PDF文档开头是否允许BOM标记?

不,就像你在规范中读到的那样,在"%PDF"字节之前不允许任何内容.

Adobe Reader在接受文件方面有着悠久的历史,尽管有一些前导或尾随垃圾字节.

参看 Adobe pdf_reference_1-7附录H中的实施说明:

3.4.1,"文件头"

  1. Acrobat查看器只需要标题出现在文件的前1024个字节内的某个位置.

  2. Acrobat查看器也接受表单的标题

    %!PS?Adobe?N.n PDF?M.m
    
    Run Code Online (Sandbox Code Playgroud)

...

3.4.4,"文件预告片"

  1. Acrobat查看器仅需要%%EOF标记出现在文件的最后1024个字节内的某个位置.

并且人们倾向于认为Adobe Reader根据需要显示的PDF是有效的,有许多PDF在野外预先有垃圾字节.