在 iText7 中提供 jar 中的字体

Providing font in jar in iText7

在 iText7 中,是否可以从类路径字体资源创建 PdfFont*?

目前,我将资源保存到临时文件夹并使用

PdfFont font;

public void setFont() {
    font = PdfFontFactory.createFont(FontProvider.getFont(), PdfEncodings.IDENTITY_H, true);
}

其中 FontProvider.getFont() returns 用于 IDE 的类路径文件的路径或将文件保存到主机系统上的临时文件夹,并且 returns 一条路径。

如果可能,我想避免将文件保存到主机系统的步骤。

(* 一种开放许可的字体)

所有静态 PdfFontFactory::createFont 方法也有一个需要 byte[] 而不是 String 的重载。因此,您需要找到一种方法将您的资源放入 byte[].

从资源位置,您可以创建一个 InputStream。然后您可以使用第三方方法从 InputStream 中获取字节(例如 Convert InputStream to byte array in Java).

InputStream is = this.getClass().getResourceAsStream("/class/path/URI");
byte[] fontBytes = IOUtils.toByteArray(is); // from Apache Commons IO
PdfFontFactory.createFont(fontBytes, PdfEncodings.IDENTITY_H, true);

仅供参考 iText 将在内部使用类似的算法将 String 引用的资源转换为 byte[],以便在 IRandomAccessSource 中进一步处理。