iText7 - 无法从 jar 加载自定义 ttf 字体
iText7 - unable to load custom ttf font from jar
美好的一天,亲爱的同事们。
你能帮我理解为什么当 spring 启动应用程序被打包到 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 时损坏了,所以我试图从资源中获取 is 作为字节数组,进一步比较表明它们与 jar 外的原始 *.ttf 文件相同.
有什么想法吗?
不要使用 is.available()
来确定资源的长度,因为通常这不是此方法 returns 的目的(请参阅许多其他问题,例如
this one).
而是通过缓冲区或使用实用方法复制整个流。
在使用 iText 7 时,您可以使用其 com.itextpdf.io.util.StreamUtil
实用程序
byte[] b = StreamUtil.inputStreamToArray(is);
美好的一天,亲爱的同事们。
你能帮我理解为什么当 spring 启动应用程序被打包到 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 时损坏了,所以我试图从资源中获取 is 作为字节数组,进一步比较表明它们与 jar 外的原始 *.ttf 文件相同.
有什么想法吗?
不要使用 is.available()
来确定资源的长度,因为通常这不是此方法 returns 的目的(请参阅许多其他问题,例如
this one).
而是通过缓冲区或使用实用方法复制整个流。
在使用 iText 7 时,您可以使用其 com.itextpdf.io.util.StreamUtil
实用程序
byte[] b = StreamUtil.inputStreamToArray(is);