我尝试使用iText在Java中生成PDF文档。 link
但我也想让用户有机会选择用于文档的字体。系统中安装了很多字体,我可以使用
列出它们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这样的解决方法?