我正在使用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
。
我有什么替代品?我真的需要这个才能在任何电脑上工作(比如其他资源)。
答案 0 :(得分:2)
我不太清楚为什么要使用别名。您可以使用其他工厂方法接受byte[]
数组并结合Class.getResourceAsStream(String)
来检索字体资源的内容,该内容可用于创建FontProgram
实例,然后构造{{1 }}
您的代码可以更改如下:
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()
)。
确保字体资源出现在最终的程序集中,你很高兴。此方法中不依赖任何URL。