java - 将 PDFBox PDFont 转换为 java.awt.Font

标签 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);

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

最佳答案

这是不可能的。

引自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类作为之间的桥梁PDFBoxjava 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/

相关文章:

java - 使用 PDFBox 在 PDF 上绘制 vector 图像

java - 我无法导入 com.itextpdf.text.Document 类

iphone - 表格 View 单元格中的 PDF 预览

java - 使用自定义字体绘制字符串会绘制各种破折号

javascript - 按比例增加网站上的每个字体大小

java - 从其他类创建私有(private)内部类的对象

java - 如何使用一个数据源以编程方式更改 Spring 中的数据库?

ios - UILabel字体需要花费时间才能更新

java - 如何使用 Junit 5 测试服务提供商实现模块?

php - 用 PDFTk 填充 PDF 时出现奇怪的字符