我正在使用 MuPDF 阅读一些 PDF 文档,最近我开始从 Google GSuite 获取一些格式错误的 PDF,其中开头的十六进制标头在前面添加了一些额外的字节。
根据我在线阅读的规范(https://www.usna.edu/CyberDept/sy110/resources/01.general/fileheaders.html),PDF文档应该以十六进制“25 50 44 46”开头,其中ASCII 格式为“%PDF”。由于某种原因,GSuite PDF 在其开头有更多字节:
0ade b503 2550 4446 2d31 2e35 0a25 bff7 ....%PDF-1.5.%..
我不知道为什么这样做。它甚至导致 linux“文件”命令将文件错误地识别为仅“数据”。不知何故,Chrome 和其他 PDF 阅读器仍然可以打开该文件,但 MuPDF 无法做到这一点 - 它认为 PDF 有零页。
一种解决方法是在找到正确的 PDF 标头字节之前删除前导字节,但是是否有更优雅的解决方案来解决此问题,例如可以传递给 MuPDF 的特殊参数?
这是完全合法的。根据 ISO 32000-2 规范:
“PDF 文件以 5 个字符“%PDF–”开头,字节偏移量应从百分号 (25h) 开始计算。
注 1 此规定允许在 %PDF- 之前使用任意字节,而不会影响 PDF 文件的可行性及其字节偏移量。”
(规范的早期版本将其限制为 1024 字节,也许?凭记忆)。
我确信 MuPDF 知道如何读取此类文件,因为它们并不罕见,所以我怀疑这里发生了其他事情。我会直接向他们报告,看看他们怎么说。