【问题标题】:Incorrect offset in cross reference table in pdfpdf中交叉引用表中的偏移不正确
【发布时间】:2020-02-19 08:55:31
【问题描述】:

我的this pdf 已损坏,即其交叉引用表已损坏。我用新的偏移值更正了这个交叉引用表。但是 acrobat 仍然显示它已损坏。我使用十六进制编辑器 neo 来计算新的偏移量。我的值是错误的还是有其他方法来计算偏移量。任何建议都会有所帮助。

【问题讨论】:

    标签: pdf pdf-generation acrobat hex-editors


    【解决方案1】:

    我用新的偏移值更正了这个交叉引用表。

    嗯,你这样做只是部分成功。您的交叉引用:

    xref
    0 13
    0000000000 65535 f 
    0000089160 00000 n 
    0000000015 00000 n 
    0000089295 00000 n 
    0000012216 00000 n 
    0000089544 00000 n 
    0000012285 00000 n 
    0000012433 00000 n 
    0000087869 00000 n 
    0000089833 00000 n 
    0000088057 00000 n 
    0000089662 00000 n 
    00000 00000 n  
    

    最后一个条目显然被破坏了,经过检查,对象 9..12 的条目都被证明是错误的。正确的值是:

    xref
    0 13
    0000000000 65535 f 
    0000089160 00000 n 
    0000000015 00000 n 
    0000089295 00000 n 
    0000012216 00000 n 
    0000089544 00000 n 
    0000012285 00000 n 
    0000012433 00000 n 
    0000087869 00000 n 
    0000088057 00000 n 
    0000088533 00000 n 
    0000089595 00000 n 
    0000089662 00000 n  
    

    此外,您的交叉引用起始值

    startxref
    91649
    %%EOF
    

    是错误的,特别是考虑到您的文件大小小于 91000 字节。正确的值是

    startxref
    89873
    %%EOF
    

    另外,页面内容流坏了:

    4 0 obj
    <</Filter/FlateDecode/Length 1627>>stream
    x
    endstream
    endobj 
    

    但这似乎是故意的。

    【讨论】:

    • 是的,我想当我删除第 4 个对象的流时。我错过了更新 startxref 值。我的疑问是假设我用你的完全改变了 pdf 的外部参照表。现在,当我在 acrobat 中打开 pdf 并关闭它时。它仍然显示您是否要保存对此 pdf 的更改的提示。我认为这意味着 pdf 仍然损坏。
    • 当我使用上面的更改打开和关闭它时,它不再提示了。因此,我认为我们所做的事情有所不同。您是否注意过交叉引用条目的大小?它必须是正好 20 个字节...
    • 是的,我查过了。 10 字节(偏移)+ 1 字节(1 空格)+ 5 字节(5 位世代)+ 1 字节(1 空格)+ 1 字节(使用或免费)+ 2 字节(空格+换行符)。我对所有条目都有这个确切的结构。
    • 请分享您文件的新状态以供分析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多