我正在使用iText7尝试加载src/main/resources/pdf/fonts
中的字体,当我在文件系统上提供字体的完整路径并从主方法运行我的代码时我没有任何问题,当我使用tomcat在war文件中运行代码时会出现问题。
我尝试了几种不同的加载字体的方法,但似乎都没有。
要么iText抱怨字体无法识别com.itextpdf.io.IOException: font.is.not.recognized
(下面的例子1),或者我得到一个空指针异常,例子二(下面),因为代码无法使用提供的路径加载字体(尽管这在提供完整文件系统路径并通过main方法运行时有效。
我可以看到字体肯定包含在正确目录(/WEB-INF/classes/pdf/fonts
)中的war文件中。以下是我想要做的事情:
private static final String FONT = "/pdf/fonts/Frutiger-LT-Std-55-Roman_18821.ttf";
try (InputStream is = MyClass.class.getClassLoader().getResourceAsStream(FONT))
{
byte[] fontBytes = IOUtils.toByteArray(is);
final PdfFont font = PdfFontFactory.createFont(fontBytes, PdfEncodings.IDENTITY_H);
}
或者:
private static final String FONT = "/pdf/fonts/Frutiger-LT-Std-55-Roman_18821.ttf";
final PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H);
我不确定在网络应用中运行时我需要加载iText的字体才能使用。
我在考虑可能因为字体似乎已经被读入输入流,我需要以某种方式在向iText注册字体之前将其传递给字节数组..