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。
我正在使用 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。