缺少后代字体字典
Missing descendant font dictionary
如果我在这里破坏了某些过程,首先要道歉。
我知道有一个问题完全相同
PDFBox returns missing descendant font dictionary 但不幸的是,由于作者无法提供详细信息,该线程突然结束。同样由于声誉低下无法继续该线程。
并且很好地说明了缺少复合字体的问题。我想知道是否有某种方法可以修复它,因为 PDF 在我们的浏览器中可以正常打开,但我们无法以编程方式处理它。
在包括最新的 2.0.21 在内的各种版本上进行了尝试
我会分享 PDF
期待您的光临
@mkl,@Tilman Hausherr
如果您需要更多详细信息,请告诉我。
我的代码试图将 PDF 转换为图像
PDDocument document = PDDocument.load(new File(pdfPath+"//"+fileName));
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
}
在 link 可用时下载了文件,我对其进行了分析。
Adobe Acrobat Reader 打开文档时显示错误消息。 iText RUPS 报告交叉引用问题。因此,第一印象是:PDF 已损坏。
尽管如此,我仔细观察了,但仔细观察的结果并没有更好...
根据交叉引用和预告片,PDF 应包含 58 个 ID 为 1 到 58 的间接对象。结果是,对象 32 到 49 丢失了,尽管其中大部分被引用,一些作为后代字体。这解释了为什么 PDFBox 报告缺少后代字体。
此外,根据交叉引用 table,对象 50 到 57 和对象 1 到 10 不在它们应该在的位置。此外,第二个交叉引用 table 位置错误,根据线性化字典,文件长度不正确。
这种破坏方式给人的印象是该文件是同一文件的两个略有不同的版本的混合体;好像尝试下载文件但在某个时候中断并从文件的新版本继续;或者好像某些 PDF 处理器以某种方式更改了文件并试图将更改后的副本保存到同一文件中但被中断了。
总结:PDF 完全损坏。
如果 PDF 处理器试图修复它,您无法确定您将从哪个版本的文件中获得信息,不同的 PDF 处理器(如果他们能以某种方式理解它)可能会以不同的方式解释文件.
如果可能,您应该拒绝该文件并请求它的 non-broken 版本。
如果不可能,从看起来最适合修复它的查看器复制数据,手动检查副本的准确性,然后检查整个提取的数据是否与您在相关帐户上拥有的其他信息相关.稍微祈祷一下也无妨。
如果我在这里破坏了某些过程,首先要道歉。
我知道有一个问题完全相同 PDFBox returns missing descendant font dictionary 但不幸的是,由于作者无法提供详细信息,该线程突然结束。同样由于声誉低下无法继续该线程。
并且很好地说明了缺少复合字体的问题。我想知道是否有某种方法可以修复它,因为 PDF 在我们的浏览器中可以正常打开,但我们无法以编程方式处理它。
在包括最新的 2.0.21 在内的各种版本上进行了尝试
我会分享 PDF
期待您的光临 @mkl,@Tilman Hausherr
如果您需要更多详细信息,请告诉我。
我的代码试图将 PDF 转换为图像
PDDocument document = PDDocument.load(new File(pdfPath+"//"+fileName));
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
}
在 link 可用时下载了文件,我对其进行了分析。
Adobe Acrobat Reader 打开文档时显示错误消息。 iText RUPS 报告交叉引用问题。因此,第一印象是:PDF 已损坏。
尽管如此,我仔细观察了,但仔细观察的结果并没有更好...
根据交叉引用和预告片,PDF 应包含 58 个 ID 为 1 到 58 的间接对象。结果是,对象 32 到 49 丢失了,尽管其中大部分被引用,一些作为后代字体。这解释了为什么 PDFBox 报告缺少后代字体。
此外,根据交叉引用 table,对象 50 到 57 和对象 1 到 10 不在它们应该在的位置。此外,第二个交叉引用 table 位置错误,根据线性化字典,文件长度不正确。
这种破坏方式给人的印象是该文件是同一文件的两个略有不同的版本的混合体;好像尝试下载文件但在某个时候中断并从文件的新版本继续;或者好像某些 PDF 处理器以某种方式更改了文件并试图将更改后的副本保存到同一文件中但被中断了。
总结:PDF 完全损坏。
如果 PDF 处理器试图修复它,您无法确定您将从哪个版本的文件中获得信息,不同的 PDF 处理器(如果他们能以某种方式理解它)可能会以不同的方式解释文件.
如果可能,您应该拒绝该文件并请求它的 non-broken 版本。
如果不可能,从看起来最适合修复它的查看器复制数据,手动检查副本的准确性,然后检查整个提取的数据是否与您在相关帐户上拥有的其他信息相关.稍微祈祷一下也无妨。