我正在使用 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。
关于java - iTextPdf7 - 从资源中获取字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798818/