【问题标题】:iTextPdf7 - Get font from resourcesiTextPdf7 - 从资源中获取字体
【发布时间】:2017-10-17 20:37:16
【问题描述】:

我正在使用 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。 我有什么选择?我真的需要这样做才能在任何电脑上工作(就像其他资源一样)。

【问题讨论】:

    标签: java custom-font itext7


    【解决方案1】:

    我不太清楚您为什么要使用别名。您可以使用接受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() 一样使用它(使用您的类名而不是 Main)。

    确保字体资源出现在最终程序集中,一切顺利。这种方法不依赖任何 URL。

    【讨论】:

    • 这仅适用于在 NetBeans 上运行时...但是在运行构建的时它仍然无法加载字体。它给出了一个 null pointer exception 。我确认并且字体在 jar 中,包括所有其他资源(另外,我可以在“工作”时将它们可视化 - 问题出在生成 PDF 文件时)
    • @Anonirato 这是难以置信的,除非 jar 构建不正确。 Alexey 只是提出了手头任务的标准方法。
    • @Alexey 我还有一些与这个问题无关的其他问题!你的回答完美!谢谢!
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2018-07-19
    • 2015-09-17
    • 1970-01-01
    • 2011-04-19
    • 2011-05-24
    相关资源
    最近更新 更多