将PDFBoxs PDFont转换为java.awt.Font



我必须阅读一个PDF文件并从中提取一些信息。因此,我正在使用PDFBox。现在我遇到了一个问题,我想通过在 JPanel 上绘制结果来显示结果。但要做到这一点,我需要底层字符串的字体信息。

我现在的问题是,我找不到将PDFont转换为java.awt.Font的好方法。我想使用PDFont的字符串表示形式创建一些映射并从中提取相关信息,例如

Arial -> new Font("Arial", Font.PLAIN, size);
Arial,Bold -> new Font("Arial", Font.BOLD, size);
//and so on

但这不起作用,因为每种字体的字符串表示形式都不同,例如

Times-Roman -> new Font("Times-Roman", Font.PLAIN, size);
Times-Bold -> new Font("Times-Roman", Font.BOLD, size);

有没有更好的转换方法?

是不可能的。

引用这个答案:

请注意,大多数 PDF 在嵌入字体时不包括完整、完整的字体。大多数情况下,它们仅包括文档中使用的字形子集。

事实上,org.apache.pdfbox.pdfviewer.PageDrawer使用自己的org.apache.pdfbox.rendering.Glyph2D类,通过创建一个java.awt.geom.GeneralPath类来充当PDFBoxjava awt之间的桥梁,该类可以通过转换转换为java.awt.Shape,而java.awt.Graphics2D又可以绘制。

在此过程中没有使用java.awt.Font,寻找它是没有用的。

虽然,如果您对PDF文件"幸运"并且实际上嵌入了整个字体,那么您可以获取所有PDFont类并读取PDFont -> FontDescriptor -> FontFile2并将该流输出到扩展名为.ttf文件中。(一旦你有了.ttf流,你也就有了java.awt.Font类。


这就是我在看到这个被遗弃的问题后几个小时内收集到的,希望它能帮助某人。

最新更新