【JasperReport+Ireport】jasperreport+ireport解决中文不显示问题 (史上最全例子)

最近项目需要java+jasperreport生成pdf并下载,琢磨了若干天终于研究出来。

pdf模板绘制工具:irport5.6 下载地址:https://download.csdn.net/download/niuchenliang524/10593060

如果你JDK环境不是1.8,可以忽略此行,在jdk1.8环境下打开irport时,图标会一闪而过,然后没任何反映。

原因及解决方法:

原因:

iReport-5.6.0不支持jdk1.8,所以我们只好用jdk1.7的环境。

解决方法:

到iReport安装目录中找到\etc\ireport.conf文件,编辑下面文件中的

#jdkhome="/path/to/jdk" 改为你的JDK7的路径。

比如:jdkhome="C:\Program Files\Java\jdk1.7.0_05"

然后就可以正常启动iReport了。

 

ireport布局介绍:

各块区域------
Title----报表名,只在第一页显示
pageHeader-----放页码,时间,创建人,每一页都会显示出来
columnHeader-----列名
detail----循环的数据,比如说我们直接从数据库中得到数据,只用将字段拖到此区域,那么就会将所有的这个字段的值进行循环了。
-----需要注意的是:table中因为放了数据,也会将这些数据接着循环。到头来,本来一个table已经将数据给循环完了,但是又由于detail的循环性质,将整个table又循环了。所以table是不能放在detail中的。这回循环table。
columnFooter-----与columnHeader相反,可以用来统计此列数据。
pageFooter-------每页底部都会显示的,如页码
lastPageFooter----最后一页的底部,如日期,签名.....
Summary--------可能需要对几页(你的报表可能有几个页组成)的统计值。比如50个销售记录共占用了3页,那么放置这些统计记录的统计值最好的地方就是summary。     
Summary只在最后一页出现。

字段,变量,参数,传参

Fields  字段

Variables  变量

Parameters 传参

可右击添加和命名对应的对像,在此就不讲述.

在ireport中如何引用字段,变量,参数?
引用字段使用 $F{field_name}
引用变量使用 $V{variable_name}
引用参数使用 $P{param_name}  或 $P!{param_name}
$P!{param_name}一般用于拼接sql语句,它的值可以与sql语句拼接后,再去执行查询.
例:定义一个参数名为 where 类型为String 默认值为 "where id=100"
有一查询语句:select * from user $P!{where}
则执行查询时会替换成:select * from user where id=100

$P{param_name}在sql语句中使用时,也有一特殊情况.
例:有一参数名为 id,类型为Integer,默认值为 new Integer(100)
有一查询语句:select * from user where id=$P{id}
执行查询可正常查询,但如果有一参数名为 name,类型为String,默认值为"zhanngle"
有一查询语句:select * from user where name=$P{name}
执行查询时出错,不知道为什么(即使数据库中有该条记录),不知是不是bug,还是自已哪里弄错了.解决办法是,将查询语句改为:select * from user where name='$P!{name}'
可以证明$P!{}语法,只做替换操作,如上只将$P!{name}替换成zhanngle.
也可以证明$P{}语法,在sql语句中使用时,值为数字类型还可以正常执行,如为字符串类型则会出错.

在程序中如何传参?
如上例定义了一个name参数,那么在程序中如何动态传参查询出不同的记录呢,也很简单.
程序代码如下:
Map params=new HashMap();
params.put("name","zhanngle");
JasperPrint print=JasperFillManager.fillReport(jasper, params,conn);

就是将参数名和值put进入一map,然后再填充报表时将map传过去就行了。

 

画好模板后,我们开始解决中文问题:

首先从网上或c:/windows/font得到你想用的字体,如果你的字体为ttf,可忽略此节,若是ttc,请祥看:

jasperreort只支持ttf的字体,所以,我们需要用软件来从ttc字体中提取出ttf字体

软件下载:https://download.csdn.net/download/niuchenliang524/10650090

 

首先解决IReport中的字体:

第一步:将IReport的Fonts文件夹添加到classpath中,添加后点确定。

 

第二步,安装字体。从c:\windows\fonts目录拷贝字体文件到一个零时目录,比如微软雅黑,拷贝后是两个ttf文件,一个普通字体,一个加粗。

在IReport中的font标签配置

 

完成后出现微软雅黑,并勾选下方的font选项

完成上述操作后,新增字体就可以选择了

在属性列表下方还有一个pdffontname属性,这里不需要修改。因为新增字体的时候已经embedded到pdf上了。

自此,在IReport中就可以将中文字体输出到PDF了

 

下面解决JasperReports编程中的PDF中文问题。

需要将字体打包加入工程,如图:

选择一个目录保存成jar文件,到工程中再引入些jar

 

然后运行程序就可以了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值