JasperReport指定自定义字体文件,解决中文不显示问题支持

原文链接:【JasperReports笔记05】JasperReport指定自定义字体文件,解决中文不显示问题支持Android_jasperreports导出pdf不显示中文-CSDN博客

目录

一、自定义字体文件

1.1、创建字体配置文件

1.2、创建fonts.xml字体文件

1.3、在Jasper Studio中添加字体

1.4、指定模板文件

1.5、案例代码

1.6、运行测试

1.7、服务器部署


一、自定义字体文件

前面几篇文章,介绍了如何使用JasperReport开发报表,可以发现,我们之前的模板文件都是使用的英文,从来没有写过中文,这是因为,默认情况下,JasperReport是不支持显示中文,如果要显示中文,那么我们就需要自己指定采用的字体文件,下面就介绍一下,如何自定义字体文件,显示中文内容。

1.1、创建字体配置文件

在SpringBoot工程中的【src/main/resource】目录下,新建一个【jasperreports.properties】配置文件,这个配置文件是JasperReport的扩展配置文件,在该文件中添加字体相关的配置信息。

# 字体扩展注册工厂类
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
# 自定义的默认字体文件
net.sf.jasperreports.extension.simple.font.families.default=fonts/fonts.xml
1.2、创建fonts.xml字体文件

当前项目的工作空间下(可以在IDEA中指定工作目录路径),创建【fonts】目录,并且新建一个【fonts.xml】字体配置文件,在该文件中指定使用到的一些字体文件路径以及字体名称,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <!--
        可以配置多个字体
        name 属性:指定字体名称,这里的字体名称在 JasperReport 模板文件中使用的要一致,才能够匹配上
    -->
    <fontFamily name="MSYaHei">
        <!-- 正常字体路径 -->
        <normal><![CDATA[fonts/MSYaHei/MSYaHei.ttf]]></normal>
        <!-- 加粗字体路径 -->
        <bold><![CDATA[fonts/MSYaHei/MSYaHei_bold.ttf]]></bold>
        <!-- 斜体字体路径 -->
        <italic><![CDATA[fonts/MSYaHei/MSYaHei.ttf]]></italic>
        <!-- 加粗斜体字体路径 -->
        <bolditalic><![CDATA[fonts/MSYaHei/MSYaHei.ttf]]></bolditalic>
        <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        <pdfEncoding>Identity-H</pdfEncoding>
        <exportFonts/>
    </fontFamily>
</fontFamilies>

在fonts目录下创建对应字体的保存目录,就拿上面的为案例,指定了一个微软雅黑的字体,并且路径是在【fonts/MSYaHei】目录下。那就把我们下载的微软雅黑字体文件,放入这个目录下面,如下图所示:

图中【working-dir】目录是我IDEA中指定的工作目录,可以自己指定:

字体文件可以百度几个字体下载网站,例如:中国字体网-免费字体下载大全-电脑PS字体下载网站。

1.3、在Jasper Studio中添加字体

当我们在制作模板文件的时候,指定的字体文件就要和我们IDEA中使用的一致,不然运行时候,就会报错。打开Jasper Studio,点击【File -> Properties】选项,如下:

在弹出窗口中,选择【Jaspersoft Studio】,继续选择下面的【Fonts】,这里就是设置字体的,如下所示:

选择【Using Project Settings】,然后选择【Add】按钮,这个就是添加我们刚刚下载的字体文件:

在弹出框中,输入字体名称,选择我们刚刚下载的字体文件路径,如下所示:

点击【Finish】之后,就可以看到我们刚刚添加的字体,之后点击close就可以啦。

到此,Jasper Studio中字体就添加好啦,下面就是在制作模板文件时候,使用我们刚刚添加的字体就可以。

1.4、指定模板文件

新建一个【FontDemo.jrxml】模板文件,添加几个Static Text、Text Filed组件,可以写几个中文,然后选择字体是微软雅黑,也就是我们刚刚添加的字体。

模板文件中使用字体文件还是比较简单的,关键是需要确保Jasper模板文件中使用的字体名称,要和我们Java代码中指定的字体相同。

1.5、案例代码

在Java代码中,就可以根据模板文件导出PDF啦,如下所示:

package com.gitcode.demo.web;
 
import com.gitcode.demo.util.JasperReportsUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * @version 1.0.0
 * @Date: 2023/8/26 21:32
 * @Author ZhuYouBin
 * @Description:
 */
@RestController
@RequestMapping("/api/report")
public class FontDemoController {
    
    @GetMapping("/font-demo")
    public String fontDemo(String format) throws Exception {
        ClassPathResource resource = new ClassPathResource("jasper/FontDemo.jasper");
        String templatePath = resource.getPath();
        String fileName = "中文字体案例";
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("name", "Jasper");
        parameters.put("age", 20);
        parameters.put("sex", "男");
        parameters.put("nation", "中国");
        // 执行导出操作
        return JasperReportsUtil.generateReport(templatePath, fileName, format, parameters);
    }
    
}
1.6、运行测试

启动工程,打开浏览器,访问 http://localhost:6251/api/report/font-demo?format=pdf地址,之后就可以在工程中,看到生成的PDF文件:

1.7、服务器部署

当我们把工程打包成jar文件之后,部署到Linux服务的时候,也是需要将字体文件一起放到服务器里面的,不然运行过程中会找不到字体,从而报错。将【font】目录放到和Jar包同级目录位置就可以啦,此时运行Jar文件的时候,就会从Jar的同级目录中寻找【font】字体文件路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/433271.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32下UART协议的一些认识与使用方法】

STM32下UART协议的一些认识与使用方法 串口定义通用串行异步收发器 协议中相关的概念空闲位起始位数据位奇偶校验位三种校验方式BT接收数据的流程 停止位波特率总结 UART的三种工作方式UART控制器发送数据流程接收数据流程 UART初始化UART相关结构体和库函数 串口定义 通用串行…

计算机网络-物理层

物理层 基本概念传输媒体信道复用频分复用&#xff08;FDM&#xff09;时分复用&#xff08;TDM&#xff09;波分复用&#xff08;WDM&#xff09;码分复用&#xff08;CDM&#xff09; 宽带接入技术ADSL技术光纤同轴混合网(HFC网)FTTx技术 数据通信常识 上次我们已经大致学习了…

基于yolov5的山羊姿态检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的山羊姿态检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的山羊姿态检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目…

AndroidStudio连不上adb报错ADB Connection Error

之前笔者一直通过AndroidStudio来看日志&#xff0c;也一直用的一套自己的SDK&#xff0c;用了好几年了。 但是突然有一天&#xff0c;AndroidStudio启动后就弹出警告窗&#xff1a;ADB Connection Error&#xff0c;如下&#xff1a; 在Event Log面板还持续性的输出&#x…

论文目录3:大模型时代(2023+)

1 instruction tuning & in context learning 论文名称来源主要内容Finetuned Language Models Are Zero-Shot Learners2021 机器学习笔记&#xff1a;李宏毅ChatGPT Finetune VS Prompt_UQI-LIUWJ的博客-CSDN博客 早期做instruction tuning的work MetaICL: Learning to …

产品推荐 - Xilinx FPGA下载器 XQ-HS/STM2

1 FPGA下载器简介 1.性能优良 FPGA下载器XQ-HS/STM2采用Xilinx下载模块设计而成&#xff08;JTAG-SMT2NC模块&#xff0c;该模块与Xilinx官方开发板KC705&#xff0c;KCU105&#xff0c;ZC702&#xff0c;ZC706&#xff0c;Zedboard等板载下载器一样&#xff0c;下载速度快…

蓝桥杯-排序

数组排序 Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序&#xff0c;并且时按从小到大的顺序。 package Work;import java.util.*;public class Imcomplete {public static void main(String args[]) {int arr[]new int [] {1,324,4,5,7,2};Arrays.sort(arr)…

C++--调整数组顺序使奇数位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 方法一&#xff1a; …

数学美学:探索“既不是最小值也不是最大值”的魅力

本篇博客会讲解力扣“2733. 既不是最小值也不是最大值”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 如果数组只有两个元素&#xff0c;直接返回任意一个即可。如果数组有三个或以上的元素&#xff0c;由于数组中的所有数字互不相同&#xff0c;我们只需要…

Git 进阶 高级用法,重要命令记录

本篇文章用于记录Git高级用法&#xff0c;新手可以看我的另一篇文章&#xff1a;Git基础教学。 Git git fetch 是git pull 的细分步骤&#xff0c;git pull 包含了git fetch git pull origin master 上述命令其实相当于git fetch git merge 在实际使用中&#xff0c;git fetc…

谷歌Gemini批量多线程写原创文章API软件-支持双标题违禁词过滤

谷歌Gemini批量多线程写原创文章软件介绍&#xff1a; 1、Gemini 是谷歌筹备了一年之久的GPT4真正竞品&#xff0c;也是目前谷歌能拿出手的功能最为强悍、适配最为灵活的大模型。 2、谷歌Gemini目前免费申请key&#xff0c;key没有额度限制&#xff0c;可以一直写文章。 3、谷…

【Claude3 最新注册教程】Claude Pro 付费订阅教程,Claude Pro多5倍使用量

一、Claude Pro 带来的变化 Claude Pro的价格与OpenAI的ChatGPT Plus相同&#xff0c;用户每月只需支付 20 美元&#xff08;美国&#xff09;或 18 英镑&#xff08;英国&#xff09;&#xff0c;就能获得比免费 Claude 2 多 5 倍的对话量、发送 "更多 "信息的能力…

【C++】类与对象(上篇)

一.类的引入 C与C语言比较起来&#xff0c;C引入了一个新的概念&#xff0c;叫做类。那么在C中&#xff0c;类又是什么呢&#xff1f; 在C中&#xff0c;类与C语言中的结构体相似&#xff0c;但不同的是&#xff0c;C中的类中&#xff0c;不仅可以定义变量&#xff0c;还能定义…

最简单 导航栏 html css

dhl.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><link type"text/css" rel"stylesheet" href"css/dhl.css"></head><div class"dhl&quo…

java编程的简化表达方法——Lambda表达式及方法引用概述

前言&#xff1a; 学到简化写法了&#xff0c;感觉需要对代码非常熟悉才能用得好&#xff0c;整理下写法。打好基础&#xff0c;daydayup! Lambda表达式 Lambda表达式是JDK8开始新增得一种语法形式&#xff1b;作用&#xff1a;用于简化匿名内部类的代码写法。 Lambda表达式的格…

汉服文化平台网站|基于SSM 框架+vue+ Mysql+Java+B/S架构技术的汉服文化平台网站设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 系统详细设计 前台首页功能模块 管理员功能 用户功能 系统结构设计 数据库设计 摘 要 研究内容 文末获取源码 系统详细设计 前台首页功能模块 管理员功能 用户功能 系统结构设计 数据库设计 论文参考 摘 要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台…

前端 css 实现标签的效果

效果如下图 直接上代码&#xff1a; <div class"label-child">NEW</div> // css样式 // 父元素 class .border-radius { position: relative; overflow: hidden; } .label-child { position: absolute; width: 150rpx; height: 27rpx; text-align: cente…

支持多平台,无需GPU!仅需8G内存即可部署运行大模型

随着ai技术不断发展&#xff0c;一直想本地运行一个大模型玩玩&#xff0c;奈何GPU价格不低...... 最近找到一款只需要8G内存即可运行的大模型&#xff0c;速度还挺快&#xff0c;特别分享出来。 本地安装前提 内存 8G 安装运行简要概述 首先运行服务端然后运出客户端即可本地…

06 - 镜像管理之:基础知识

1 了解镜像 Docker镜像是一个特殊的文件系统&#xff0c;除了提供容器运行时所需的程序、库、资源、配置等文件外&#xff0c;还包含了一些为运行时准备的一些配置参数&#xff08;如匿名卷、环境变量、用户等&#xff09;。 但注意&#xff0c; 镜像不包含任何动态数据&#…

Operator开发

概述 基于k8s做扩展的时候&#xff0c;一种典型方式则是 operator 开发&#xff0c;通过 CRD(CustomResourceDefinition) 来定义自定义资源&#xff0c;开发对应的 controller 来做业务控制&#xff0c;以期实现特定的业务需求。那么其本质是什么&#xff1f;是事件驱动。与我…