iTextPdf7 - 从资源中获取字体

iTextPdf7 - Get font from resources

我正在使用 iText7 通过 Java 创建 PDF。我使用了一些自定义字体,这些文件位于 resources 文件夹中。

当我在 netbeans 上测试和 运行 应用程序时,这完美地工作:

PdfFontFactory.register("./src/main/resources/GOTHAM-BOLD.otf", "gotham-bold");
PdfFont gBold = PdfFontFactory.createRegisteredFont("gotham-bold", PdfEncodings.IDENTITY_H);

但是当我构建并尝试 运行 应用程序并生成 PDF 文件时,iText 无法找到字体文件,因为它需要直接 path 到它。 我有什么选择?我真的需要这个才能在任何电脑上工作(就像其他资源一样)。

我不太清楚你为什么要使用别名。您可以使用其他接受 byte[] 数组和 Class.getResourceAsStream(String) 的工厂方法来检索字体资源的内容,该字体资源可用于创建 FontProgram 实例,然后构造 PdfFont.

您的代码可以修改如下:

// Apache Commons IO is used, but any way of retrieving bytes from stream will suffice
byte[] fontContents = IOUtils.toByteArray(getClass().getResourceAsStream("GOTHAM-BOLD.otf"));

FontProgram fontProgram = FontProgramFactory.createFont(fontContents);
document.setFont(PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H));

如果您在静态上下文中工作,可以像 Main.class.getResourceAsStream() 一样使用它(用您的 class 名称代替 Main)。

确保字体资源出现在最终程序集中,您就可以开始了。这种方法不依赖于任何 URL。