ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

simsun.ttc is not a valid ttf file(linux OS/windows OS)

2022-06-30 20:35:38  阅读:204  来源: 互联网

标签:文件 simsun windows BaseFont 字体 ttc OS resources


https://blog.csdn.net/wsjzzcbq/article/details/112252102

报错原因:

项目打包时,会对resources目录下的字体文件进行压缩,项目部署后,又会对字体文件进行解压,导致字体文件发生变化,进而损坏字体文件,因此报错 simsun.ttc is not a valid TTF file。笔者初次遇到这个报错时也很棘手,以为是字体文件本身的问题,后来仔细对比才发现打包后的字体文件大小和打包前不同,如果将打包前的字体文件直接复制到打包后的项目中,就没有这个报错了

————————————————————————————————————————————————————————————

终极 解决方案:

使用 simsun.ttc 放在classpath下

1、在window下, 从 C:\Windows\Fonts 文件夹中,复制仿宋字体(simsun.ttc)到maven 项目中 src/main/resources/fonts/

2、在pom.xml中添加

2.1、这种方式会导致字体库文件被压缩

项目打包时,会对resources目录下的字体文件进行压缩,项目部署后,又会对字体文件进行解压,导致字体文件发生变化,进而损坏字体文件,因此报错 simsun.ttc is not a valid TTF file

<build>
    <resources>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.ttc</include>
            </includes>
            <excludes>
                <exclude>**/*.font</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>false</filtering>
            <includes>
                <include>**/*.font</include>
            </includes>
        </resource>
    </resources>
</build>

2.2、这种方式不会压缩文件
<build>
    <resources>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>fonts/*</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>false</filtering>
            <includes>
                <include>fonts/*</include>
            </includes>
        </resource>
    </resources>
</build>

2.3、设置字体
BaseFont bf = BaseFont.createFont("fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
2.4、设置其他字体也是一样的
//设置中文字体,解决中文不能显示问题(加载classpath下字体, 名字后面要加上type索引 0/1,不能大于1,看源码就知道)
BaseFont bf = BaseFont.createFont("/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

3、其他 3种解决办法

1、将字体文件放在服务器的某个文件夹下,而不是放在resources目录下跟随项目,这样就不存在打包压缩的问题了,就解决了

2、项目打包后,手动将没被压缩的字体文件复制到打包后的对应文件夹下

3、使用系统的字体文件,如果系统环境没有字体文件,可以给系统安装字体文件,这个解决办法其实和办法1是同样的道理,这里推荐使用办法1

4、JasperReport在Linux系统下找不到字体的问题

https://blog.csdn.net/zouliping123456/article/details/78950689

场景:

解决JasperReport在Linux系统下找不到字体的问题
1.异常信息
以JasperReport3.7.6为例:

net.sf.jasperreports.engine.util.JRFontNotFoundException: 

2.解决方法
2.1.导入字体
IReport中先导入设计报表作需要的字体:【Tools->Options->IReport->Fonts】,选择【Install Font】,然后选择你的字体文件,如果是中文字体,则选择【PDF Encoding】为【Identity-H (Unicode with horizontal writing)】并勾选【Embed this font in PDF Document】
2.2.报表设计
把PdfFontName, PdfEncoding, PdfEmbedded三个设置都去掉。报表设计中使用的字体只能选择上面导入的字体列表中的字体。
2.3.导出字体
在【Tools->Options->IReport->Fonts】中选择所有手动导入的字体(不包括内置的),然后选择【Export as extension】,把字体导出为一个Jar包。
2.4.添加字体JAR包
把字体JAR包添加在运行环境classpath中,或随项目发布。

———————————————————————————————————————————

https://www.freesion.com/article/74181399976/

标签:文件,simsun,windows,BaseFont,字体,ttc,OS,resources
来源: https://www.cnblogs.com/JourneyOfFlower/p/16428379.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有