iTextPdf7 - 从资源中获取字体

zed*_*ana 3 java custom-font itext7

我正在使用 iText7 用 Ja​​va 创建 PDF。我使用了一些自定义字体,这些文件在resources文件夹中。

当我在 netbeans 上测试和运行该应用程序时,这非常有效:

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

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

Ale*_*ach 5

我不太确定您为什么使用别名。您可以结合使用其他接受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));
Run Code Online (Sandbox Code Playgroud)

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

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