ireport+jasperReport+java生成PDF

#### ireport + jasperResport

[source,]
----
ireport编辑PDf模板,设置参数及变量,与jasperReport完美结合,在java中通过动态赋值从而生成PDF。
----

##### 参数Paramters和变量Field
[source,]
----
1、一般PDF中的单一属性值可以通过设置参数值,在java代码中创建Map来进行赋值;而Field主要设置在Detail区域,获取后台的list数据(Field可以设置为实体类的字段名);

2、可以设置不同的参数类型,如String,BigDecimal等;

3、可以对ireport的PDF模板中的参数设置一个key值,java程序可以通过这个key值来获取到该控件,从而进行后续操作;(变量同理)

4、markup:可以将该控件内容设置为html格式,从而可以输出一些html的转义标签,如换行
(该方式可以解决在linux下内容被截断的问题);

5、Position type:控件位置,可以设置为浮动或固定;

6、Stretch Type:控件内容伸缩规则;

7、Pringt When Expression:可以对该控件设置表达式以控制控件的打印与否,如new Boolean($F{checked}),即为当checked为true时,该控件打印;

8、Pattern:设置控件内容的格式,如日期格式;

9、Stretch When Overflow:当控件内容太多时,可以进行动态伸缩。

10、Blank When NULL:当控件内容为NULL时打印空白,而不是NULL;

11、Horizontal Alignment:设置控件内容的水平分布,居中或居左/右;

12、Vertical Alignment:设置控件内容的垂直分布,居中或居左/右

13、Rotation:控件内容旋转;

14、Line Spacing:控件内容的行间距;

15、Text的Pdf Name属性一般选择Sans Serif西体字。
----

##### 注意点
[source,]
----
1、如果想要打印出中文字体,应该怎么做?
(1)设置Pdf字体为STSong-Light;
(2)Pdf Encoding:UniGB-UCS2-H;
(3)导入iTextAsian.jar。

2、Detail区域由于自带循环属性,主要放置的是报表的list数据;在Column Header中一般放置表格的头部;Column Footer放置表格的统计部分,但是需要注意的是这三个区域在每一页都会显示。

3、一般Detail和Column Footer之间会有一个空白的区域,如何去掉?
勾选该PDF的Float column footer属性。

4、Summary区域一般作为文件的总结放在尾部,且只出现在最后一页。

5、Page Header与Page Footer作为页面的头部和尾部,可以设置是否在每一页出现;但是Page Footer与Detail之间总会出现一段空白,因此如果想要避免这种情况,可以将需要和Detail连接在一起的数据放在Summary区域,但是由于Summary是作为一个整体存在,当一页剩余的空间不足以放下整个Summary时,程序会自动将Summary放置在下一页,这样也会出现和Detail之间有空白的现象,因此目前空白区域问题无法完全解决(后续研究透彻后可能会解决这个问题。。。)。

6、PDF的内容可以通过设计多个Frame框架来布局,这样整体样式比较好控制。
----

##### 在java中通过JasperReport和Ireport生成PDF
[source,]
----
1、引入以下包:
groovy、groovy-all、jasperreports、jasperreports-fonts
        
2、由于jasper无法解析到ItextAsian.jar,因此设置中文格式无法正常显示,需要将iTestAsian包重新打包部署。

3、动态设置表格的列(或任意的控件)显示与否?
第一种方式:可以设置Print Expression,通过正则表达式的方式进行;
第二种方式:在PDF的模板中设置一个Collection类型的参数,通过java程序给该集合赋值,从而达到动态设置的效果。

4、动态设置每个列的宽度?
通过Jasper根据控件的key值就可以获取到该控件,然后就可以设置各种属性。

5、linux下无法通过File的路径获取到文件,需要使用流来进行操作,因此不能直接在项目中放置.jasper文件,因为如果模板中有引入其他图片或文件,将会导致文件找不到,从而无法生成PDF。正确的做法是:在项目中放置未经编译的原始ireport文件,即.jrxml文件。一般放置在resources下,在jrxml中可以直接使用/pdf/xxx.png路径的方式引入图片。
----
 

你可能感兴趣的:(ireport,JasperReport,java)