這篇文章,主要介紹JasperReport指定自定義字體文件,解決中文不顯示問題。
目錄
一、自定義字體文件
1.1、創(chuàng)建字體配置文件
1.2、創(chuàng)建fonts.xml字體文件
1.3、在Jasper Studio中添加字體
1.4、指定模板文件
1.5、案例代碼
1.6、運(yùn)行測(cè)試
1.7、服務(wù)器部署
一、自定義字體文件
前面幾篇文章,介紹了如何使用JasperReport開發(fā)報(bào)表,可以發(fā)現(xiàn),我們之前的模板文件都是使用的英文,從來沒有寫過中文,這是因?yàn)?,默認(rèn)情況下,JasperReport是不支持顯示中文,如果要顯示中文,那么我們就需要自己指定采用的字體文件,下面就介紹一下,如何自定義字體文件,顯示中文內(nèi)容。
1.1、創(chuàng)建字體配置文件
在SpringBoot工程中的【src/main/resource】目錄下,新建一個(gè)【jasperreports_extension.properties】配置文件,這個(gè)配置文件是JasperReport的擴(kuò)展配置文件,在該文件中添加字體相關(guān)的配置信息。
# 字體擴(kuò)展注冊(cè)工廠類
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
# 自定義的默認(rèn)字體文件
net.sf.jasperreports.extension.simple.font.families.default=fonts/fonts.xml
1.2、創(chuàng)建fonts.xml字體文件
在當(dāng)前項(xiàng)目的工作空間下(可以在IDEA中指定工作目錄路徑),創(chuàng)建【fonts】目錄,并且新建一個(gè)【fonts.xml】字體配置文件,在該文件中指定使用到的一些字體文件路徑以及字體名稱,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<!--
可以配置多個(gè)字體
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目錄下創(chuàng)建對(duì)應(yīng)字體的保存目錄,就拿上面的為案例,指定了一個(gè)微軟雅黑的字體,并且路徑是在【fonts/MSYaHei】目錄下。那就把我們下載的微軟雅黑字體文件,放入這個(gè)目錄下面,如下圖所示:
圖中【working-dir】目錄是我IDEA中指定的工作目錄,可以自己指定:
字體文件可以百度幾個(gè)字體下載網(wǎng)站,例如:https://www.cnziti.cn/。
1.3、在Jasper Studio中添加字體
當(dāng)我們?cè)谥谱髂0逦募臅r(shí)候,指定的字體文件就要和我們IDEA中使用的一致,不然運(yùn)行時(shí)候,就會(huì)報(bào)錯(cuò)。打開Jasper Studio,點(diǎn)擊【File -> Properties】選項(xiàng),如下:
在彈出窗口中,選擇【Jaspersoft Studio】,繼續(xù)選擇下面的【Fonts】,這里就是設(shè)置字體的,如下所示:
選擇【Using Project Settings】,然后選擇【Add】按鈕,這個(gè)就是添加我們剛剛下載的字體文件:
在彈出框中,輸入字體名稱,選擇我們剛剛下載的字體文件路徑,如下所示:
點(diǎn)擊【Finish】之后,就可以看到我們剛剛添加的字體,之后點(diǎn)擊close就可以啦。
到此,Jasper Studio中字體就添加好啦,下面就是在制作模板文件時(shí)候,使用我們剛剛添加的字體就可以。
1.4、指定模板文件
新建一個(gè)【FontDemo.jrxml】模板文件,添加幾個(gè)Static Text、Text Filed組件,可以寫幾個(gè)中文,然后選擇字體是微軟雅黑,也就是我們剛剛添加的字體。
模板文件中使用字體文件還是比較簡(jiǎn)單的,關(guān)鍵是需要確保Jasper模板文件中使用的字體名稱,要和我們Java代碼中指定的字體相同。
1.5、案例代碼
在Java代碼中,就可以根據(jù)模板文件導(dǎo)出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", "中國(guó)");
// 執(zhí)行導(dǎo)出操作
return JasperReportsUtil.generateReport(templatePath, fileName, format, parameters);
}
}
1.6、運(yùn)行測(cè)試
啟動(dòng)工程,打開瀏覽器,訪問http://localhost:6251/api/report/font-demo?format=pdf地址,之后就可以在工程中,看到生成的PDF文件:
1.7、服務(wù)器部署
當(dāng)我們把工程打包成jar文件之后,部署到Linux服務(wù)的時(shí)候,也是需要將字體文件一起放到服務(wù)器里面的,不然運(yùn)行過程中會(huì)找不到字體,從而報(bào)錯(cuò)。將【font】目錄放到和Jar包同級(jí)目錄位置就可以啦,此時(shí)運(yùn)行Jar文件的時(shí)候,就會(huì)從Jar的同級(jí)目錄中尋找【font】字體文件路徑。
到此,JasperReport使用中文字體就介紹完啦,公眾號(hào)回復(fù)【Jasper中文字體配置】獲取源碼。文章來源:http://www.zghlxwxcb.cn/news/detail-674094.html
綜上,這篇文章結(jié)束了,主要介紹JasperReport指定自定義字體文件,解決中文不顯示問題。。文章來源地址http://www.zghlxwxcb.cn/news/detail-674094.html
到了這里,關(guān)于【JasperReport筆記05】JasperReport指定自定義字體文件,解決中文不顯示問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!