问题描述
您好,亲爱的同事们。
能否请您帮我理解为什么在将 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);