在iText7中,是否可以从类路径字体资源创建PdfFont *?
目前,我将资源保存到临时文件夹并使用
PdfFont font;
public void setFont() {
font = PdfFontFactory.createFont(FontProvider.getFont(), PdfEncodings.IDENTITY_H, true);
}
其中FontProvider.getFont()返回类路径文件的路径以便在IDE中使用,或者将文件保存到主机系统上的临时文件夹并返回此路径。
如果可能,我想避免将文件保存到主机系统的步骤。
(*开放的授权字体)
答案 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
中进行进一步处理。