我正在尝试使用 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 这样的解决方法?