如何修复这个奇怪的损坏pdf问题

如何修复这个奇怪的损坏pdf问题,pdf,pdflib,Pdf,Pdflib,我们通过将PDF页面提取到单独的文件中来处理大量传入的PDF。有时我们会遇到这个奇怪的问题。每个提取的页面几乎都是整个文件的大小。 例如,如果pdf是500 Mb,有1000个页面,那么从中提取单独的页面将导致每个500 Mb有1000个文件。即使在打开单独的页面文件时,也只能看到其中的一个页面 当我们使用AdobeAcrobat功能减少文件大小时,AdobeAcrobat会花费一些时间并生成较小的文件。之后,提取页面的问题就解决了。页面开始正确提取,大小较小 到目前为止,我们已经遇到了一些文件

我们通过将PDF页面提取到单独的文件中来处理大量传入的PDF。有时我们会遇到这个奇怪的问题。每个提取的页面几乎都是整个文件的大小。 例如,如果pdf是500 Mb,有1000个页面,那么从中提取单独的页面将导致每个500 Mb有1000个文件。即使在打开单独的页面文件时,也只能看到其中的一个页面

当我们使用AdobeAcrobat功能减少文件大小时,AdobeAcrobat会花费一些时间并生成较小的文件。之后,提取页面的问题就解决了。页面开始正确提取,大小较小

到目前为止,我们已经遇到了一些文件,可能还会遇到更多

我试图寻找一个工具来自动修复这些文件,我们下载并尝试了Pdflib PLOP工具。不幸的是,它没有修复该文件,即使我选择了所有适用的修复和优化选项。以下是我使用的命令行:

~/plop-v4-inputopt xmppolicy=remove repair=force-outputopt optimize=all-outfile fixed.pdf bad.pdf

它根本没有解决问题


你曾经遇到过这样的问题吗?您有没有关于如何使用pdflib库或任何其他库或工具修复这些文件的示例?

pdf修复程序无法修复这些文件的原因是它们一开始就没有损坏。它们只是以一种简单的pdf拆分器复制所有资源、图像、字体等的方式构建的。。。从源pdf转换为每个拆分pdf

更详细地说,pdf是由许多对象构建的,原始对象(如字符串和数字)和更复杂的对象(如数组和字典)

每个页面都由从页面树引用的词典表示。这些页面字典引用各自的内容流,其中包含构建页面的说明。虽然这些指令并不都是独立的,但它们可能会按名称引用字体和位图图像等资源。这些资源在资源字典中查找,资源字典也从页面字典中引用

但是资源字典不需要只包含引用它的页面的资源,可能会有更多的资源,并且在绘制页面时会忽略页面上没有使用的额外条目

这使得pdf制作者可以简单地将整个pdf的所有资源放入一个单一的资源字典中,然后所有页面字典都会引用该字典,一些pdf制作者确实会这样做。像这样构建的PDF是困扰您的PDF

另一方面,pdf拆分器通常假定从页面引用的资源字典只包含该页面的资源,因此,只需将整个资源字典复制到该页面的拆分文件中即可

在使用单个资源字典构建pdf的情况下,这会导致为每个页面复制所有源pdf资源,并且由于资源通常包含大数据块,因此每个页面的拆分文件都几乎与源文件一样大

要回到堆栈溢出、编程的焦点,需要实现的是一个

阅读pdf

对于每个页面,解析内容流中使用的资源名称

将每个页面的相应资源字典替换为仅包含该页面上使用的条目的资源字典,以及

再次存储此更改的pdf

在拆分之前将这样的程序应用于pdf应该可以防止手头的问题


注意:情况实际上有点复杂,因为不仅页面有资源字典,还有其他实体,如注释、表单XObject和模式。这些都必须同样处理。此外,页面信息可能不仅出现在页面字典本身中,而且还可以从祖先继承到页面树的根。但这些只是细节…

这是一个怎样的编程问题?在最好的情况下,这是一个更适合我们的通用软件问题。在最坏的情况下,这是一个工具建议的请求,根据,这在这里是特别离题的。这个问题的解决方案可能在一些库中,比如pdflib。解决方案需要自动化而不是手动工作,所以最好的答案是编程答案。这就是为什么它在这里,而不是在超级用户中。你的问题没有提到编程,我们也不能推荐一个工具或库。你需要重新表述你的问题,或者把它移到另一个位置。