我必须阅读 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);
有更好的方法来进行转换吗?
最佳答案
这是不可能的。
引自this answer :
be aware that most PDFs do not include to full, complete fontface when they have a font embedded. Mostly they include just the subset of glyphs used in the document.
事实上,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
并将该流输出到扩展名为 .ttf
的文件中。 (一旦你有了.ttf
流,你也就有了java.awt.Font
类。)
这是我在看到这个废弃的问题后几个小时内收集到的内容,希望它会对某人有所帮助。
关于java - 将 PDFBox PDFont 转换为 java.awt.Font,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839206/