文本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);**

字体类型无法识别

由于您无法读取jar包中的模板路径,因此请将字体文件从jar包中取出并将其放在jar兄弟目录中。

最新更新