使用java加载外部字体,报错java.awt.FontFormatException: bad table, tag=一串数字,实际上是字体文件被损坏导致的。
其根本原因是maven打包时,如果开启了filtering,会在打包时重新编译资源目录下的文件,导致某些类型的文件编译后无法使用。

 

maven打包项目的时候pom.xml配置文件里可以配置对项目进行统一编码,但是部分文件 可能不需要进行重新编码,例如: 证书文件;重新编码后可能导致证书不可用。

需要过滤掉不需要编码的文件:过滤后缀为.crt或者.p8的所有文件,不对其进行统一编码

 

代码如下:

    <build>
        <finalName>${artifactId}</finalName>
        <!-- directory下文件输出目录 -->
        <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
        <resources>
            <resource>
                <!--指定资源目录  -->
                <directory>src/main/resources</directory>
                <!-- 开启过滤,将maven中声明的参数替换directory下的文件中的参数 -->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>


解决方法为,在build标签下添加如下代码:

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <!-- 过滤后缀不需要转码的文件后缀名.crt/.ttf-->
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xls</nonFilteredFileExtension>
                        <nonFilteredFileExtension>zip</nonFilteredFileExtension>
                        <nonFilteredFileExtension>cer</nonFilteredFileExtension>
                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
                        <nonFilteredFileExtension>py</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>

通过在资源文件处理插件中排除对应类型的文件,即可避免问题

 

 

 

原文地址:

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐