iText7 - 无法从 jar 加载自定义 ttf 字体

问题描述

您好,亲爱的同事们。

能否请您帮我理解为什么在将 Spring Boot 应用程序打包到 jar 中时会出现此错误,而从 IDE 调试应用程序时却没有原因?

var is = getClass().getResourceAsstream("/fonts/2211.ttf");
byte[] b = new byte[is.available()];
is.read(b);
var fontProgram = FontProgramFactory.createFont(b); // <-- com.itextpdf.io.IOException: Type of font is not recognized.

我的想法是 *.ttf 可能被打包到 jar 中被破坏了,所以我试图从资源中获取一个字节数组,进一步比较表明它们与 jar 之外的原始 *.ttf 文件相同。

有什么想法吗?

解决方法

不要使用 is.available() 来确定资源的长度,因为通常这不是此方法返回的内容(请参阅许多其他问题,例如 this one).

而是通过缓冲区复制整个流或使用实用方法。

当您使用 iText 7 时,您可以使用其 com.itextpdf.io.util.StreamUtil 实用程序

byte[] b = StreamUtil.inputStreamToArray(is);