在iText7中提供jar中的字体

时间:2016-07-19 20:14:06

标签: itext

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

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

PdfFont font;

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

其中FontProvider.getFont()返回类路径文件的路径以便在IDE中使用,或者将文件保存到主机系统上的临时文件夹并返回此路径。

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

(*开放的授权字体)

1 个答案:

答案 0 :(得分:2)

所有静态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);

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