java - iTextPdf7 - 从资源中获取字体

标签 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);

但是当我构建并尝试运行应用程序并生成 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/

相关文章:

java - 注入(inject)属性文件覆盖应用程序中定义的属性文件

java - 找出最长回文的长度。没有额外的数据结构是否可以做到这一点?

php - 如何使用 AJAX 和 PHP 在在线服务器中启用 CORS 以获取用于另一个 BigCartel 站点的字体

java - 是否可以在泛型函数中测试类型?

java - 如何创建可选择的自定义 SWT 控件?

ios - 如何使用自定义键盘扩展插入 NSAttributedString?

ios - 我的自定义字体未显示

java - iText:降低图像质量(用于减小生成的 PDF 大小)

footer - 将信息添加到文档页脚时如何获取 iText7 中的总页码?

java - iText 7 核心中缺少 xmlworker