我遇到了我编写的过滤器程序的问题。它可以检测如果文件是PDF文档阅读前5个字节的文件,它比较固定的缓冲区:PDF文档中是否允许字节顺序标记?
25 50 44 46 2D
这工作得很好,只是我看到的是开头的几个文件字节顺序标记来代替:
EF BB BF 25 50 44 46 2D ^-------^
我想如果这实际上是由PDF specs允许的。如果我检查文档的第7.5节,我把它读作“无”:
PDF文件的第一行应是由5个字符的标题%PDF-后跟形式的版本号1.N,其中N是一个数字然而0-7
,我在野外看到这些文件和用户会很困惑,因为PDF阅读器程序可以打开这些文件通过我的过滤器拒绝。
那么:PDF文档开始时是否允许BOM标记? (我不是在谈论一个String对象,但这里的PDF文件本身)
您的最后一段实际上是不正确的。许多应用程序专门在PDF文件的前面添加了二进制数据,以便强制文件传输协议将文件作为二进制文件处理,而不会通过错误处理平台之间的结尾来破坏PDF文件。由于Adobe Acrobat一直在正确地处理这个问题(因此也需要其他PDF阅读器),这并不是什么大不了的事情。 –
我们可能会劈头发,但我仍然支持这种说法。该规范实际上建议_after_ ASCII版本标题作者应该包含一个包含四个二进制字符的注释部分,以在其PDF包含二进制数据(这些日子大部分都是这样)时强制进行二进制传输。然而,这不是OP文件开头的BOM,但是。 (实际上它并不是真正的BOM。)另外,在我15多年的Web开发中,我从来没有将垃圾数据放在任何二进制文件的前面来强制它下载,这里有一个专用的HTTP头。 –
我不是说你做了它:)但它通常是完成的。我已经在前面写了一堆垃圾(当然不是BOM),PDF书面预检软件和PDF文件非常常见。这不是由错误的软件,而是非常刻意地完成的。 –