java jasperReports导出PDF字体加粗失效,中文显示不出来

最近搞了一个项目,需要生成投保电子凭证的pdf文件,之前在项目也用了这个组件,只是很多年前别人开发的,我只是项目负责人而已,想起以前的项目就找了ireport这个做为生成pdf的工具。一开始捣鼓了好久,中文不显示出来,加粗失效问题困扰很久,终于两天时间把他设计完了,主要是模板改的版本太多,其实这个东西真的挺简单的。不多说了,直接上代码。

<!-- jasperreports Start -->
		<dependency>
			<groupId>net.sf.jasperreports</groupId>
			<artifactId>jasperreports</artifactId>
			<version>6.0.0</version>
		</dependency>
		<!--字体加粗的依赖包-->
		<dependency>
			<groupId>net.sf.jasperreports</groupId>
			<artifactId>jasperreports-fonts</artifactId>
			<version>6.0.0</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.groovy</groupId>
			<artifactId>groovy</artifactId>
			<version>2.4.9</version>
		</dependency>
		<!--生成pdf组件包:iText.jar  -->
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>4.2.1</version>
		</dependency>
		<!--中文字体包:iTextAsian.jar-->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>
	   <!-- jasperreports end -->

调用代码

/**
 * @FileName testController.java
 * @Description:
 *
 * @Date 2020年2月22日
 * @author pangxianhe
 * 
 */
@RestController("testController")
@RequestMapping("/ireport")
@Api(value = "ireport测试", tags = "ireport测试")
public class testController extends BaseController<DtsWbRequestEntity> {
	@GetMapping("exportPdf")
	public void exportPdf(HttpServletRequest request, HttpServletResponse response) throws Exception {

		// 获取容器资源解析器
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		org.springframework.core.io.Resource[] resources = resolver.getResources("ireport/21.jasper");
		org.springframework.core.io.Resource[] resourcestb = resolver.getResources("img/tb.png");
		org.springframework.core.io.Resource[] resourceswb = resolver.getResources("img/wb.png");
		InputStream stream = resources[0].getInputStream();
		URI streamtb = resourcestb[0].getURI();
		URI streamwb = resourceswb[0].getURI();
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("policyno", "9231989100");
		map.put("username", "贤哥");
		map.put("idtype", "身份证");
		map.put("idcard", "458015");
		map.put("tbimg", streamtb);
		map.put("wbimg", streamwb);
		map.put("signingdate", "2020-2-23");
		map.put("starendtime", "2020 年 02 月 25 日 00 时-2021 年 02 月 24 日 24 时");
		
		
		JasperPrint jasperPrint = JasperFillManager.fillReport(stream, map, new JREmptyDataSource());
		byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
		response.setContentType("application/pdf");
		response.setContentLength(bytes.length);
		ServletOutputStream ouputStream = response.getOutputStream();
		ouputStream.write(bytes, 0, bytes.length);
		ouputStream.flush();
		ouputStream.close();
	
		 
	}

}

以上代码基本上搞定,接下来需要注意的是设计的时候的小细节了

中文显示不出来,需要设置下这个,也可以在xml中全局添加这个

具体的代码如下:

<style name="Base" isDefault="true" fontSize="10" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>

接下来解决加粗之后的字体不剩下的问题,具体什么原因不显示,大家可以百度下,接下来很简单的一个设置即可,选择这个类型的文本即可。

最后补充一个小技巧给大家,

static text如何设置边框呢?然后堆成一个表格呢,接下来记住下面几段代码,好像在软件中没这个设置,我是找不到的。

z在xml中找到你要添加的边框静态字体的上方添加如下代码即可生产边框。代码如下:

				<box>
					<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
					<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
				</box>

效果图我就不贴了,以上,如有说漏请留言互相交流。谢谢

 

由于项目测试的时候用的是windows系统,但是发布到linux系统的时候,他报如下错误,具体处理方法看下文

2020-03-04 10:55:18.469 - WARN  [nio-7010-exec-7] n.s.j.e.f.FontUtil            .checkAwtFont - line:351 - Font '宋体' is not available to the JVM. For more details, see 

1、把需要用到的字体(可以直接拷贝windows系统的C:\WINDOWS\Fonts 下的相关字体)拷贝当前项目的classpath下,一般为classes目录下 
2、在classpath里添加 jasperreports.properties 属性文件 
文件内容为: net.sf.jasperreports.awt.ignore.missing.font=true 

 

以上补充完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值