PDF 文档中是否允许使用字节顺序标记?
Are byte order marks allowed in PDF document?
我写的过滤程序有问题。它通过读取文件的前 5 个字节并将其与固定缓冲区进行比较来检测文件是否为 PDF 文档:
25 50 44 46 2D
除了我看到一些以字节顺序标记开头的文件外,这工作正常:
EF BB BF 25 50 44 46 2D
^-------^
我想知道 PDF specs 是否真的允许这样做。如果我查看该文档的第 7.5 节,我将其读作 "no":
The first line of a PDF file shall be a header consisting of the 5 characters %PDF– followed by a version number of the form 1.N, where N is a digit between 0 and 7
然而,我在野外看到这些文档,用户感到困惑,因为 PDF reader 程序可以通过我的过滤器拒绝它们来打开这些文档。
那么:PDF 文档的开头是否允许使用 BOM 标记? (我在这里不是在谈论字符串对象,而是在谈论 PDF 文件本身)
不,BOM
在 PDF
文件的前面 不是 有效。
PDF 是一种二进制文件格式,因此 BOM 实际上没有意义,就像在 ZIP 文件或 JPEG 文件的前面有 BOM 一样。
我猜您正在使用的 PDF 是来自错误配置的应用程序,这些应用程序要么已经在其输出缓冲区的前面有一些东西,要么更有可能是在错误地假设 PDF 是文本的情况下创建的基于格式。
So: are BOM markers allowed at the start of PDF documents ?
不,就像您在规范中读到的那样,“%PDF”字节之前不允许有任何内容。
但是 Adobe Reader 长期以来一直接受文件,尽管有一些前导或尾随垃圾字节。
比照。 Adobe pdf_reference_1-7:
附录 H 中的实现说明
3.4.1, “File Header”
Acrobat viewers require only that the header appear somewhere within
the first 1024 bytes of the file.
Acrobat viewers also accept a header of the form
%!PS−Adobe−N.n PDF−M.m
...
3.4.4, “File Trailer”
- Acrobat viewers require only that the
%%EOF
marker appear somewhere
within the last 1024 bytes of the file.
而且人们倾向于认为 Adobe Reader 根据需要显示的 PDF 是有效的,有很多 PDF 确实在前面有垃圾字节。
我写的过滤程序有问题。它通过读取文件的前 5 个字节并将其与固定缓冲区进行比较来检测文件是否为 PDF 文档:
25 50 44 46 2D
除了我看到一些以字节顺序标记开头的文件外,这工作正常:
EF BB BF 25 50 44 46 2D
^-------^
我想知道 PDF specs 是否真的允许这样做。如果我查看该文档的第 7.5 节,我将其读作 "no":
The first line of a PDF file shall be a header consisting of the 5 characters %PDF– followed by a version number of the form 1.N, where N is a digit between 0 and 7
然而,我在野外看到这些文档,用户感到困惑,因为 PDF reader 程序可以通过我的过滤器拒绝它们来打开这些文档。
那么:PDF 文档的开头是否允许使用 BOM 标记? (我在这里不是在谈论字符串对象,而是在谈论 PDF 文件本身)
不,BOM
在 PDF
文件的前面 不是 有效。
PDF 是一种二进制文件格式,因此 BOM 实际上没有意义,就像在 ZIP 文件或 JPEG 文件的前面有 BOM 一样。
我猜您正在使用的 PDF 是来自错误配置的应用程序,这些应用程序要么已经在其输出缓冲区的前面有一些东西,要么更有可能是在错误地假设 PDF 是文本的情况下创建的基于格式。
So: are BOM markers allowed at the start of PDF documents ?
不,就像您在规范中读到的那样,“%PDF”字节之前不允许有任何内容。
但是 Adobe Reader 长期以来一直接受文件,尽管有一些前导或尾随垃圾字节。
比照。 Adobe pdf_reference_1-7:
附录 H 中的实现说明3.4.1, “File Header”
Acrobat viewers require only that the header appear somewhere within the first 1024 bytes of the file.
Acrobat viewers also accept a header of the form
%!PS−Adobe−N.n PDF−M.m
...
3.4.4, “File Trailer”
- Acrobat viewers require only that the
%%EOF
marker appear somewhere within the last 1024 bytes of the file.
而且人们倾向于认为 Adobe Reader 根据需要显示的 PDF 是有效的,有很多 PDF 确实在前面有垃圾字节。