概述
主要介绍如何根据jasper报表和数据生成pdf文档,中文字体问题的解决方案和日期时间的格式化输出。
iReport版本:5.2.0
生成pdf文档
maven依赖
net.sf.jasperreports jasperreports 5.2.0
完整的依赖树:
[INFO] +- net.sf.jasperreports:jasperreports:jar:5.2.0:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.8.0:compile [INFO] | +- commons-digester:commons-digester:jar:2.1:compile [INFO] | +- com.lowagie:itext:jar:2.1.7.js2:compile [INFO] | | +- bouncycastle:bcmail-jdk14:jar:138:compile [INFO] | | +- bouncycastle:bcprov-jdk14:jar:138:compile [INFO] | | \- org.bouncycastle:bctsp-jdk14:jar:1.38:compile [INFO] | | +- org.bouncycastle:bcprov-jdk14:jar:1.38:compile [INFO] | | \- org.bouncycastle:bcmail-jdk14:jar:1.38:compile [INFO] | +- jfree:jcommon:jar:1.0.15:compile [INFO] | +- jfree:jfreechart:jar:1.0.12:compile [INFO] | +- xml-apis:xml-apis:jar:1.3.02:compile [INFO] | +- eclipse:jdtcore:jar:3.1.0:compile [INFO] | +- org.codehaus.castor:castor:jar:1.2:compile [INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.0.5:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.0.5:compile [INFO] | \- com.fasterxml.jackson.core:jackson-annotations:jar:2.0.5:compile [INFO] \- sinobest:font-song:jar:1.0:compile
其中,font-song jar是自制的字体jar包,下载地址:。
基于sql的数据
1. 配置数据源
2. 配置SQL
每一个结果字段作为一个Field。
3. 在程序中获取文档内容
public void test() throws JRException, IOException, SQLException { InputStream is = Main.class.getClassLoader().getResourceAsStream("reports/XZFYSQS-query.jasper"); Mapparameters = new HashMap (); parameters.put("SQD_SYSID", "4028ca9850d19ccb0150d19cd1ae0000"); Connection conn = ...; byte[] datas = JasperRunManager.runReportToPdf(is, parameters, conn); conn.close();}
基于JavaBean的数据
1. 新建JavaBean
package cn.sinobest.jzpt.fzywgz.reports.pojo;public class XZFYSQS_RY { private java.lang.String SQR; private java.lang.String XB; private java.sql.Timestamp CSNY; ......}
2. 在iReport中添加编译路径
3. 在iReport中加入Field
4. 在程序中获取文档内容
public void test() throws JRException, IOException { InputStream is = Main.class.getClassLoader() .getResourceAsStream(reports/XZFYSQS-javabean.jasper); ListryList = new ArrayList (); ryList.add(...); JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource( ryList); byte[] datas = JasperRunManager.runReportToPdf(is, null, dataSource); ...}
中文字体解决方案
在编程时根据模板生成pdf内容时,可能出现中文打印不出来的问题;解决方案如下:
- 加入字体jar包:font-song
- 中文字体,使用宋体、仿宋、方正小标宋简体
- 设置中文组件的属性 simsun.ttf来自于font-song.jar
- 纠正模板名称 我曾以XZFYSQS_RY.jrxml命名,编译之后得XZFYSQS_RY.jasper,打印不出中文 以XZFYSQS-RY.jrxml命名,编译之后得XZFYSQS-RY.jasper,可以打印中文 以XZFYSQS_01.jrxml命名,编译之后得XZFYSQS_01.jasper,可以打印中文
日期时间格式化输出
选中TextField - 右键 - Field pattern
对于日期类型,MM则始终显示2位月份,M则根据需要显示1或2位;其他域类推。