微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缺少后代字体字典

如何解决缺少后代字体字典

如果我在这里中断某些程序,请先道歉。

我知道有一个问题完全相同 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);
           }
  

解决方法

在链接可用时下载了文件,我对其进行了分析。

Adob​​e Acrobat Reader打开文档时显示错误消息。 iText RUPS报告存在交叉引用问题。因此,第一印象是:PDF损坏了。

尽管如此,我还是仔细观察了一下,但结果却并没有更好...

根据交叉引用和预告片,PDF应包含ID为1到58的58个间接对象。但是,事实证明,尽管对象32到49大部分都被引用了,但它们却丢失了,有些是后代字体。这解释了为什么PDFBox报告丢失的后代字体。

此外,根据交叉参考表,对象50至57和1至10不在它们应位于的位置。另外,根据线性化字典,第二个交叉引用表的位置错误,文件长度不正确。

这种破坏方式给人的印象是该文件是同一文件的两个稍有不同版本的混合;好像试图下载文件但在某个时候中断并从文件的新版本继续进行;或好像某个PDF处理器以某种方式更改了文件并试图将更改后的副本保存到同一文件中,但被中断了。

摘要:PDF完全损坏。

如果PDF处理器试图修复该文件,您将无法确定从哪个版本的文件中获取信息,不同的PDF处理器(如果可以理解)可能会以不同的方式解释该文件。 / p>

如果可能的话,您应该拒绝该文件,并请求该文件的完整版本。

如果不可能,请从看似最能修复它的查看器中复制数据,手动检查副本的准确性,然后检查整个提取的数据是否与您在有关帐户上拥有的其他信息有关。稍作祈祷也不会受伤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。