iText 7 - 无法识别字体
iText 7 - font not recognized
我正在使用 ttf 文件为捷克字母实现固定字体。
只要我 运行 我的调试器 (IntelliJ 2020.3) 中的代码就可以正常工作。
但是如果我尝试 运行 在我的测试项目中构建的 jar 文件,我会收到以下错误:
Exception in thread "main" com.itextpdf.io.IOException: font.is.not.recognized
at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:291)
at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:214)
代码:
InputStream in = Template_Dokument.class.getClassLoader().getResourceAsStream("font.ttf");
byte[] targetArray = null;
try {
targetArray = new byte[in.available()];
in.read(targetArray);
} catch (IOException e) {
e.printStackTrace();
}
FontProgram fontProgram = FontProgramFactory.createFont(targetArray);
PdfFont font = PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H, false);
错误发生在方法中:FontProgramFactory.createFont
显然你必须以 4Kb 的小单位转换输入流(到字节数组)。
这个帮我解决了。
问题(很可能)与您读取文件的方式无关,而是 ttf 文件在打包到 jar 中时被更改。将它添加到你的 pom 文件的构建部分应该这样做:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
有关详细信息,请参阅 https://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html
URL font_path = Thread.currentThread().getContextClassLoader().getResource("font/font1.ttf");
byte[] b = PdfEncodings.convertToBytes(String.valueOf(font_path), PdfEncodings.WINANSI);
PdfFont font = PdfFontFactory.createFont(b, PdfEncodings.WINANSI, true);**
无法识别字体类型
我正在使用 ttf 文件为捷克字母实现固定字体。
只要我 运行 我的调试器 (IntelliJ 2020.3) 中的代码就可以正常工作。 但是如果我尝试 运行 在我的测试项目中构建的 jar 文件,我会收到以下错误:
Exception in thread "main" com.itextpdf.io.IOException: font.is.not.recognized
at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:291)
at com.itextpdf.io.font.FontProgramFactory.createFont(FontProgramFactory.java:214)
代码:
InputStream in = Template_Dokument.class.getClassLoader().getResourceAsStream("font.ttf");
byte[] targetArray = null;
try {
targetArray = new byte[in.available()];
in.read(targetArray);
} catch (IOException e) {
e.printStackTrace();
}
FontProgram fontProgram = FontProgramFactory.createFont(targetArray);
PdfFont font = PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H, false);
错误发生在方法中:FontProgramFactory.createFont
显然你必须以 4Kb 的小单位转换输入流(到字节数组)。
这个帮我解决了。
问题(很可能)与您读取文件的方式无关,而是 ttf 文件在打包到 jar 中时被更改。将它添加到你的 pom 文件的构建部分应该这样做:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
有关详细信息,请参阅 https://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html
URL font_path = Thread.currentThread().getContextClassLoader().getResource("font/font1.ttf");
byte[] b = PdfEncodings.convertToBytes(String.valueOf(font_path), PdfEncodings.WINANSI);
PdfFont font = PdfFontFactory.createFont(b, PdfEncodings.WINANSI, true);**
无法识别字体类型