微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iText 7 - 无法识别字体

如何解决iText 7 - 无法识别字体

我正在使用 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

解决方法

问题(很可能)不在于您如何读取文件,而在于 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了解更多详情

,

显然你必须以 4Kb 的小单位转换 Inputstream(到字节数组)。

https://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-array-in-java

这个给我解决了。

,
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);**

无法识别字体类型

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。