我必须阅读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);
有更好的方法进行转换吗?
答案 0 :(得分:1)
这不可能。
引用this answer:
请注意,大多数PDF嵌入字体后,都不会包含完整的完整字体。通常,它们仅包含文档中使用的字形的子集。
实际上,org.apache.pdfbox.pdfviewer.PageDrawer
使用自己的org.apache.pdfbox.rendering.Glyph2D
类,通过创建PDFBox
类可以充当java awt
和java.awt.geom.GeneralPath
之间的桥梁,到java.awt.Shape
的转换,而java.awt.Graphics2D
可以依次绘制。
在此过程中没有使用java.awt.Font
,寻找它是没有用的。
尽管,如果您对PDF文件很“幸运”,并且实际上嵌入了整个字体,那么您可以grab all PDFont classes并阅读PDFont -> FontDescriptor -> FontFile2
,然后使用{{ 1}}扩展名。 (一旦您拥有.ttf
流,您还将拥有.ttf
类。)
那是我在看到这个被遗弃的问题几小时后收集的,希望它能对某人有所帮助。