将PDFBoxs PDFont转换为java.awt.Font

时间:2014-04-03 13:26:33

标签: java pdf fonts pdfbox

我必须阅读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);

有更好的方法进行转换吗?

1 个答案:

答案 0 :(得分:1)

这不可能。

引用this answer

  

请注意,大多数PDF嵌入字体后,都不会包含完整的完整字体。通常,它们仅包含文档中使用的字形的子集。

实际上,org.apache.pdfbox.pdfviewer.PageDrawer使用自己的org.apache.pdfbox.rendering.Glyph2D类,通过创建PDFBox类可以充当java awtjava.awt.geom.GeneralPath之间的桥梁,到java.awt.Shape的转换,而java.awt.Graphics2D可以依次绘制。

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

尽管,如果您对PDF文件很“幸运”,并且实际上嵌入了整个字体,那么您可以grab all PDFont classes并阅读PDFont -> FontDescriptor -> FontFile2,然后使用{{ 1}}扩展名。 (一旦您拥有.ttf流,您还将拥有.ttf类。)


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