我有没有外部参照表的pdf文件,这个pdf是由3d边服务生成的
是否有任何库\解决方案修复此pdf文件而不在adobe acrobat中打开它?错误是Unable to find xref table
答案 0 :(得分:4)
为从未有过的pdf创建外部参照表不应该太难(不太可能涉及线性化或增量保存),因此您不得不怀疑PDF生产者生成的PDF的质量。 / p>
获取PDF(v1.7)参考的副本;您需要引用的部分是3.2.9和3.4(特别是3.4.3和3.4.4),并在十六进制编辑器中打开您的文件。
滚动到文件的最底部。 该文件应以“%% EOF”结尾;紧接在它之前应该是'startxref'[\ r \ n]后跟一个数字,它是'xref'部分开始的字节偏移量。根据您的错误消息,此号码可能会丢失或关闭。外部参照部分通常位于最后一个endobj之后但位于尾部部分之上,尾部本身位于startxref部分之上。在您写完“外部参照”部分后,您需要保留预告片的副本。
要创建外部参照部分,您需要扫描PDF的正文以查找包含以下内容的行:IDNumber GenNumber'obj'\ r \ n。在最简单的情况下,GenNumber将始终为0,并且当您从上到下移动时,IDNumber将始终按顺序递增。 (如果GenNumber永远不为零,那么您正在处理已逐步保存的文件;这是您不想处理的复杂问题)。跟踪每条线的偏移量以及IDNumber和GenNumber。 在外部参照中写出第一行,包括第一个IDNumber和找到的间接对象的数量(假设它们都按顺序排列)。然后,为每个间接对象写出偏移量(填充到10位),空格,GenNumber(00000),空格,'n',eol(\ r \ n)。然后,添加之前保存的预告片,startxref部分和'%% EOF'行。保存文件,看看是否能修复文件的问题。
答案 1 :(得分:2)
检查了file provided by the OP后发现基本问题不是缺少的交叉引用表。相反,问题最终是文件实际上是两个完整PDF文件的组合,第一个是93863字节,第二个是112857字节。
两者都显示相同的形式,唯一的区别是第二个在底部添加了六个QR码。
可能有人试图合并这两个PDF(这种方式根本不起作用),或者可能完全是偶然发生的。
因此,OP实际需要的是一个工具,将文件分割成93863字节,就在%PDF-1.4
文件头之前。
如果您想知道为什么某个程序声称Unable to find xref table
- 在PDF的末尾有这样的行:
startxref
111945
%%EOF
该数字表示交叉引用所在的文件开头的偏移量。
因此,如果您的文件中连续有两个PDF,则此偏移量会被伪造(因为偏移量从文件的最开头计算)并指向现在没有交叉引用的文件
在这种情况下,某些程序会尝试修复文件,重建交叉引用表,而其他程序则会因错误而失败。 Adobe Reader属于前者类型,OP试图运行后者。
答案 2 :(得分:0)
也许:
如果你(非常!)熟悉PDF格式,你可以自己解决它:) PDF是内部文本..好吧,除了流和嵌入对象
答案 3 :(得分:-1)
PDF的提供者是HP产品(设备)