我正在尝试使用 iText 在 Java 中生成 PDF 文档。 链接

但我也想让用户有机会选择用于文档的字体。系统中安装了很多字体,我可以使用它们列出它们

GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

但是当我尝试直接将字体名称传递给BaseFont构造函数时

BaseFont.createFont(s, BaseFont.IDENTITY_H, true);

我得到一个例外

com.lowagie.text.DocumentException: Font 'Abyssinica SIL' with 'Identity-H' is not recognized.

另一种选择是将BaseFont传递给字体文件的路径(存储在 jar 或系统中的某个地方),但在第一种情况下,我必须使用我的应用程序部署所有字体,在第二种情况下,我必须想一想获取系统字体文件位置的方法。据我所知,Java 对字体进行了一层抽象 - 公共 API 不知道任何路径,并且不鼓励使用私有 API(比如 FontManager)。

另一种选择是使用在BASEFONT中声明的常量,但只提供 4 种字体(Courier,Helvetica,Symbol 和 Times Roman)。

有没有办法在 PDF 中使用系统字体,用 iText 生成而不用应用程序部署它们并使用像 FontManager 这样的解决方法?