聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> JasperReport5.6.1编码及Studio使用

JasperReport5.6.1编码及Studio使用

时间:2014-09-23 19:22:31    下载该word文档

JasperReport5.6.1

编码及Studio使用


1. JasperReport编码 1

1.1. 加入Jar 1

1.2. 生成报表传给客户端 1

1.3. 报表另存为多种格式 2

2. JasperSoft Studio报表设计器使用 5

2.1. 简介 5

2.1.1. 报表生命周期 5

2.1.2. 界面 6

2.2. 基本使用 7

2.2.1. 配置数据连接(数据适配器) 7

2.2.2. 创建新报表 12

2.2.3. 设置查询语句 15

2.2.4. 报表各部分组成 16

2.2.5. 制作明细表 16

2.2.5.1. 添加表头 16

2.2.5.2. 添加字段 18

2.2.5.3. 设定PDF字体 19

2.2.5.4. 设定边框 20

2.2.5.5. 设定栏高 21

2.2.5.6. 设置字段域 22

2.2.6. 参数的使用 23

2.2.6.1. 添加参数 23

2.2.6.2. 程序中传递参数 24

2.2.6.3. 报表模板接收参数 24

2.2.7. 自定义变量的使用 24

2.2.7.1. 顺序号 24

2.2.7.2. 小计 26

2.2.7.3. 合计 28

2.2.7.3.1. 表头合计 28

2.2.7.3.2. 表尾合计 28

2.3. 报表设计器进阶 30

2.3.1. 分组报表 30

2.3.2. 图形报表 33

2.3.3. 子报表 35

2.3.3.1. 制作父报表 35

2.3.3.2. 制作子报表 36

2.3.3.3. 子报表自适应行高 41


1. JasperReport编码

下面详细说明一下如何利用JasperReport实现自己系统中的报表功能。

1.1. 加入Jar

首先在工程中加入核心类包。

解压从官网上下载的压缩包,在dist目录中可以找到“jasperreports-5.6.1.jar”和“jasperreports-fonts-5.6.1.jar”,复制到项目WEB-INF/lib下,加入到Eclipse的构建配置中。

再加入JasperReport运行所需的支持包。建议将“lib”文件夹下的所有jar文件都复制到项目的lib文件夹中。如果遇到JasperReport所提供的jar包和系统原有Jar包冲突,建议保留版本较新的jar

1.2. 生成报表传给客户端

JasperReport可以将生成的报表以文件流的形式传送给客户端浏览器。

官方提供的生成方法,是先填充报表模板,然后采用各类Export对象输出。但是我没有实验成功……欢迎各路高手指教,我可以修改此部分的说明。

我采用JasperReportsUtils提供的方法生成(spriing包中提供)报表。

建议可以采用html或者pdf格式输出。以下是代码实例:

//创建报表参数Map对象,需要传入报表的参数,均需要通过这个map对象传递

Map parameters = new HashMap();

//设置报表的默认类型,此处设置为html,防止传入空值

String report_type="html";

//获取报表输出的类型

if(request.getParameter("type")!=null&&!"".equals(report_type)){

report_type =request.getParameter("type");

}

//读取当前的查询子句,查询子句已经作为变量,设置在报表模板中了

String whereValue= request.getParameter("wherevalue");

parameters.put("whereValue", " where "+whereValue);

//读取报表模板文件

File reportFile = new File("d:/test.jasper");

//创建JDBC连接。本例使用JDBC数据源,DataSourceHibernate中获取。

DataSource ds = (DataSource) AppContextHolder.getAppContext().getBean("dataSource");

Connection conn = ds.getConnection();

//报表文件临时存储设置,切记!!此临时文件夹一定要真实存在!!!

JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "d:/cacheDir");

parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);

virtualizer.setReadOnly(true);

JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);

JRAbstractExporter exporter = null;

if("pdf".equals(report_type)){

response.setContentType("application/pdf");

exporter = new JRPdfExporter();

}else if("html".equals(report_type)){

response.setContentType("text/html");

exporter = new HtmlExporter();

}

JasperReportsUtils.render(exporter, jasperPrint, response.getOutputStream());

exporter=null;

// manually cleaning up

virtualizer.cleanup();

//关闭JDBC连接

conn.close();

1.3. 报表另存为多种格式

JasperReport支持将报表导出为多种格式保存,可以将报表导出到指定格式,生成指定格式的实体文件;也可以以文件流的形式传输给客户端浏览器,由用户自行保存。

本例提供以文件流形式返回客户端进行保存的实例代码:

//创建报表参数Map对象,需要传入报表的参数,均需要通过这个map对象传递

Map parameters = new HashMap();

String type=request.getParameter("type");

//读取当前的查询子句,查询子句已经作为变量,设置在报表模板中了

String whereValue= request.getParameter("wherevalue");

parameters.put("whereValue", " where "+whereValue);

//读取报表模板文件

File reportFile = new File("d:/test.jasper");

//创建JDBC连接。本例使用JDBC数据源,DataSourceHibernate中获取。

DataSource ds = (DataSource) AppContextHolder.getAppContext().getBean("dataSource");

Connection conn = ds.getConnection();

//报表文件临时存储设置,切记!!此临时文件夹一定要真实存在!!!

JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "d:/cacheDir");

parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);

virtualizer.setReadOnly(true);

JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, conn);

JRAbstractExporter exporter = null;

if ("pdf".equals(type)){//生成PDF格式的报表。此功能已通过测试。

exporter = new JRPdfExporter();

response.reset();

response.setContentType("application/pdf");

response.setHeader("Content-Disposition", "attachment;filename="+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".pdf");//打开,保存

}else if ("rtf".equals(type)){//生成RTF格式的报表。此功能已通过测试。

exporter = new JRRtfExporter();

response.reset();

response.setContentType("application/msword");

response.setHeader("Content-disposition","attachment;filename="+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".rtf");

}else if ("xml".equals(type)){//生成XML格式的报表。此功能已通过测试。

exporter = new JRXmlExporter();

response.reset();

response.setHeader("Content-Disposition", "attachment;filename=\""+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".xml\"" );//打开保存

response.setCharacterEncoding("GBK");

}else if ("xls".equals(type)){//生成XLS格式报表。此功能已通过测试。

exporter = new JRXlsExporter();

response.reset();

response.setContentType("application/vnd.ms-excel");

response.setHeader("Content-Disposition", "attachment;filename=\""+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".xls\"" );//打开保存

}else if ("csv".equals(type)){//生成CSV格式报表。乱码,无法使用

exporter=new JRCsvExporter();

response.reset();

response.setContentType("application/x-msdownload; charset=\"GBK\"");

response.setHeader("Content-Disposition", "attachment;filename=\""+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".csv\"" );//打开保存

response.setCharacterEncoding("GBK");

}else if ("odt".equals(type)){//此段代码未测试

exporter = new JROdtExporter();

response.reset();

response.setContentType("application/x-msdownload");

response.setHeader("Content-Disposition", "attachment;filename=\""+new String(rl.getReport_name().getBytes("gbk"), "iso8859-1")+".odt\"" );//打开保存

}

JasperReportsUtils.render(exporter, jasperPrint, response.getOutputStream());

exporter=null;

// manually cleaning up

virtualizer.cleanup();

conn.close();

2. JasperSoft Studio报表设计器使用

2.1. 简介

5.5版本开始,Jaspersoft Studio将取代iReport 成为JasperReports官方设计器。iReport 维护截止日期到2015年底,意味着不会再有新的功能增加进iReport,但会做一些关键bug的修复、更新。所幸的是基于eclipseJaspersoft Studio同样开源、免费!

Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是iReport设计器的一个完整重构,基于Eclipse平台实现。它能够让你创建包含图表、图片、子报表、交叉表等非常复杂的布局。可以通过JDBCTableModelsJavaBeansXMLHibernateCSV或自定义数据源来读取数据。可以将报表输出成PDFRTFXMLXLSCSVHTMLXHTMLtextDOCXOpenOffice

2.1.1. 报表生命周期

iReportJasperSoft Studio中的报表的生命周期是相同的。

当你使用iReportJasperSoft Studio做报表时,要创建一个JRXML文件,该文件是包含报表布局定义的XML文档。布局是完全可视化,这样你就可以忽略JRXML文件的基础结构。执行报告之前,JRXML必须编译成名为Jasper的二进制文件。Jasper文件就是应用程序生成报表所需要的。

有许多数据源类型。您可以从SQL查询,XML文件,csv文件,HQLHibernate查询语言)查询,JavaBeans集合等。如果你没有一个合适的数据源,JasperReports的允许你编写自己的自定义数据源。通过Jasper文件和数据源,JasperReports 就能生成最终用户想要的文档格式。

iReportJasperSoft Studio允许您配置数据源,并使用它们来测试您的报表。在许多情况下,数据驱动向导可以帮助您快速设计您的报表。iReport包括JasperReports引擎本身,可以让您预览报表输出,测试和优化您的报表。

2.1.2. 界面

Jaspersoft Studio安装完毕后,会在桌面放置一个图标,双击此图标,即可运行报表设计器。下面可以看到JasperSoft Studio界面

Report editing area(主编辑区域)中,您直观地通过拖动,定位,对齐和通过Designer palette(设计器调色板)对报表元素调整大小。

JasperSoft Studio有一个多标签编辑器,Design,Source Preview

Design tab:当你打开一个报告文件,它允许您以图形方式创建报表选中

Source tab 包含用于报表的JRXML源代码。

Preview tab 允许在选择数据源和输出格式后,运行报表预览。

很多页面可以查看数据:

Repository Explorer view:包含JasperServer生成的连接和可用的数据适配器列表

Project Explorer view:包含JasperReports的工程项目清单

Outline view:在大纲视图中显示了一个树的形式的方式报告的完整结构。

Properties view:通常是任何基于Eclipse的产品/插件的基础之一。它通常被填充与实际所选元素的属性的信息。这就是这样,当你从主设计区域(即:一个文本字段)选择一个报表元素或从大纲,视图显示了它的信息。其中一些属性可以是只读的,但大部分都是可编辑的,对其进行修改,通常会通知更改绘制的元素(如:元素的宽度或高度)。

Problems view:显示的问题和错误,例如可以阻断报告的正确的编译。

最后,Report state summary提供了有关在报表编译/填充/执行统计用户有用的信息。错误会显示在这里。

2.2. 基本使用

2.2.1. 配置数据连接(数据适配器)

要做报表,先要配置一个数据库连接,否则咱们报表里的数据从哪里来涅?

在左侧Repository Explorer区中,在“Data Adapter”上点击鼠标右键,选择“Create Data Adapter”,创建我们自己的“数据适配器”。

系统显示如下界面:

此处可以对数据适配器配置文件进行重命名。我无所谓,没改名,Next

这一步,选择数据源的类型。这里有各种你喜欢的或者你不喜欢的数据源。我是个传统的人……我用关系型数据库,所以我选择“Database JDBC Connection”。Next

这一步,需要:

1)给创建的这个数据连接起个名字;

2)根据数据库选择驱动类型;

终于,对于数据库,这次我们基本上啥也不用干了。Jaspersoft Studio已经内置了很多常用数据库的驱动,使用的时候直接选就可以了。JDBC驱动列表里连Hadoop Hive什么的新潮驱动都有,基本上做到了只有你不会的,没有我没有的……

当然,如果这还满足不了你的话,你还可以添加你指定的JDBC驱动jar包。

3)修改一下数据连接URL,要符合你实际的数据库IP、服务名什么的;

4)输入用户名、密码;

5)测试一下,如果能连接成功,就可以做后面的工作了。

搞定之后,点击“Finish”,把我们的劳动成果保存下来。

2.2.2. 创建新报表

Let’s begin!!!先来创建一个新的空白报表开练!点击菜单中的“文件”New”,系统会创建一个新的空白报表模板。

或者点击工具栏上的图标。

Jaspersoft Studio提供了丰富多样的报表和图表,几乎可以满足日常工作的各种需要。

为了便于讲解,我们选择最标准的A4竖向空白报表。

选择完毕,点击“Next”。

系统显示“名称和位置”界面,可以在这里设置报表的名称,以及报表文件存储的位置。

设置完毕,点击“Next”,系统进入“数据源”界面。可以选择已经配置在系统中的数据源,或者点击“New”按钮,创建新的数据源连接。可以在此处设置查询语句,查询需要编制报表的原始数据。

设置完毕,点击“Next”,系统进入“完成”界面。点击“Finish”按钮,即完成了报表的生成。

空白报表的界面如下。

2.2.3. 设置查询语句

数据库连接设定完毕后,就可以通过SQL查询语句,查询出指定的数据,用以设置、填充报表了。

点击报表设计工作区中,工具栏上的“DataSet and Query editor dialog”按钮,如下图,系统会显示“DataSet and Query Dialog”界面。

用户可以在SQL查询语句输入窗口中,输入需要查询数据的查询语句,点击右上角的“Read Fields”按钮,界面下方的字段列表中,就会显示此查询语句中所涵盖的所有字段的列表。在后面的报表设计中,我们就可以直接使用这些字段了。

注意:在“Fields”列表中,只保留报表中使用的字段,其他用不到的字段最好用“Delete”删掉,防止由于数据表变化,导致报表模板中的字段设置与数据表对应不上,导致报表报错。

输入完毕后,点击“OK”按钮,系统即会把查询语句保存在报表模板中。

2.2.4. 报表各部分组成

下面,就可以正式开始制作报表模板了。

首先,需要了解一下报表各部分的组成:

1、 Title : 报表的表头。只在首页打印一次。

2、 PageHeader : 报表的页首。每页都打印。

3、 ColumnHeader : 报表的行首,通常用来定义行的字段名称。每页都打印。

4、 Detail : 报表的内容。根据数据数量,自动循环输出。

5、 ColumnFooter : 报表的行尾,可用来告知报表的一些参数,诸如页码等。每页都打印。

6、 PageFooter : 报表的页尾。每页都打印。

7、 LastPageFooter : 最后页的页尾。只在最后页打印一次。

8、 Summary : 计算用。

2.2.5. 制作明细表

2.2.5.1. 添加表头

我们以制作明细表式的报表为例。我们可以在右侧“Elements”中找到需要的所有组件。

首先需要设定表头。表头中,一般都是报表的名称,所以添加不可修改的文字即可。

如果表头只在第一页输出,则需要将表头文字放在“Title”区;如果表头每页都要输出,则应该放在“pageHeader”,即“页首”区。

点击“Elements”上的“Static Text”组件,如下图。

然后将组件拖拽到“Title”区或“pageHeader”区中,即可将组件加入到此区域中。

在此文字输入区域中输入表头名称即可。

输入完毕,需要设置文字属性,对文字进行排版。在右下角的“Properties”区中,可以设置静态文本框的位置、边框、文字属性等等。点击相应的页签,即可进行对应的设置。

2.2.5.2. 添加字段

设置完表头,即可设置报表需要输出的内容。首先可以设定需要输出的字段。

在左侧“Outline”区中,展开“Fields”项,即可看到此时报表模板中所能访问的所有字段。

如果没有输入SQL语句,或者SQL语句中包含参数,此处不会自动连接数据库更新字段。此时可以在“Fields”节点上点击鼠标右键,点击弹出菜单中的“Create Field”手工添加字段。但是要注意,字段名称一定要和数据库中的一致,否则会产生错误。

选中一个需要打印的字段,然后拖动至报表中,放在“Detail”区中。拖动所有需要输出的字段,在“Detail”区中排好位置。

系统会自动在“Column Header”区中放置与字段对应的“列头文本”,我们只需调整位置、修改文字、设置格式即可。

Tips:

如果使用Excel作为设置的模板,Excel中,行高的高度与Studio中设置基本相同,而列宽单位与行高单位不同,1单位(列宽)=6.48磅(行高),可以根据此公式进行换算。

2.2.5.3. 设定PDF字体

为了让报表在PDF格式输出时可以正常输出中文,需要设定每个域的文字字体。

选择需要设定字体的文本域或者字段域,在右侧的“Properties”区,选择“Advanced”即可修改相关字体的设置。

具体设置如下:

(1) PDF EmbeddedTrue

(2) PDF EncodingUniGB-UCS2-HChinese Simplified

(3) PDF Font NameSTSong-Light

2.2.5.4. 设定边框

报表中可以设定每个输出域的边框。一般我们会选择四边均有边框的模式。

点击需要设定边框的字符或者字段域,在右侧的“Properties”区,选择“Borders”页,修改“Pen Width”(笔宽度),例如设置为“1”,即可显示此域的边框。

2.2.5.5. 设定栏高

为了让报表输出的更美观,我们可以设定报表各个栏宽度。

点击左侧树形图中各个栏的名称,或者直接点击工作区中栏的区域,在右侧“Properties”区中,即可修改栏的高度。

可以在此处设置各栏的高度,不需要的栏,可以将高度设置为0

为了使Detail区中输出的报表内容的表格可以相连,需要将Detail区的高度设为与字段域高度相同。本例中,字段域高度为30,则Detail域的高度也为30

2.2.5.6. 设置字段域

以下,说明一下报表中“字段域”的一些常用设置。

在打印报表时,有的时候会遇到字段中的内容很长,标准的表格打印不下的情况。此时,用户就会希望表格能够自动适应内容的多少而自动增加行高。在JasperReport中可以通过设置实现。

选中所有需要设置的字段域,在右侧“Properties”区中可以进行如下设置。

1、 Font-PDF embedded”:选择“true”,可以将报表输出到PDF中。

2、 Font-PDF Encoding”:选择“UniGB-UCS2-HChinese Simplified)”,保证PDF中的中文可以正确编码。

3、 Font-PDF Font Name”:选择“STSong-Light”,保证PDF报表中的中文可以正确显示。

4、 Misc-Print repeated values”:选择“true”。在打印时,可以输出相同的值。

5、 Print When-Detail Overflow”:选择“true”。在数据当页没有打印完毕,需要在第二页打印时,可以将表格的内容,包括边框,在第二页中输出。

6、 Size-Stretch Type”:选择“Relative to Tallest Object”。则所有被选中的字段域可以自动适应条目拉伸。

7、 TextField Properties-Blank when null”:选择“true”,是当字段的值是Null时,输出空白格。

8、 TextField Properties-Stretch with overflow”:选择“true”,当文本域的内容不能完全被显示在模板定义的区域内时,允许文本域拉伸。

2.2.6. 参数的使用

2.2.6.1. 添加参数

上面的例子中,报表模板使用的SQL查询语句是固定的,不能随着程序的运行而改变。

使用Studio制作报表模板,可以通过使用“参数”功能,接收程序传递过来的参数表,并将参数传递到报表模板中,从而实现根据程序运行的情况,动态组合SQL查询语句,动态生成报表数据。

在“查询设置”界面的下方,点击“Parameters”,就可以切换到参数列表界面。

点击“Add”,就可以添加新的参数。

在“Parameter Name”中添加变量名称,在“Class Type”选择变量的数据类型。

2.2.6.2. 程序中传递参数

添加完毕的变量,既可以在变量列表中浏览到,可以在程序中通过Map传递过来。

2.2.6.3. 报表模板接收参数

要想在报表模板中使用变量,需要在SQL查询语句中输入“$P!{变量名}”,如此格式进行调用。

最简单的办法是,直接在参数列表中选中需要加入的参数,然后拖拽到SQL语句中。默认拖拽过来的参数显示为“$P{变量名}”,建议手工加入“!”,改成“$P!{变量名}”,否则报表可能无法正确接收系统传递过来的参数。

2.2.7. 自定义变量的使用

2.2.7.1. 顺序号

如果需要设置顺序号(计数器),可以按照以下方式设置。设置完毕后在字段域中引用此变量即可。

在“Outline”区中的“Variable”节点上点击鼠标右键,选择“Create Variable”,新增加一个变量

在右侧的“属性”区中,可以设置新增的变量的属性。

各属性解释如下:

Name:变量的名称改为“rank”。

Value Class Name:变量的数据类型。此处根据数据库的不同,字段类型的不同,选择不同的数据类型。例如,Oracle的数值型字段均定义为Number型,则此处需要选择“java.math.BigDecimal”;若为SQL ServerMySQL数据库,整型为Integer,则此处选择“java.lang.Integer”。如此类推。

Calculation:计算函数。此处选择“No Calculation Function”。

Expression:变量计算公式。可以在此处输入变量统计时计算的公式,可以使用系统中的变量、字段等资源,通过调用不同的方法,实现公式的设置。本例中,公式设置为

$V{rank}.intValue()+1

Initial Value Expression:变量重置时初始值。可以留空,系统可以自动根据字段类型赋予0或者空值。也可以手工赋予指定类型的数据。例如,本例中留空。

Increment type:增长类型。表示变量增长的计算范围。如果在分组报表中使用,此处选择“group”,即在分组范围内进行累加;如果在普通报表中使用,此处选择None

Incrementer Factory Class:增长工厂类。一般用不到。

Reset type重置类型。表示变量在什么时候做重置操作。如果是在分组报表中使用,此处选择Group,当分组变化时,即重新合计;如果在普通报表中使用,此处选择Report

2.2.7.2. 小计

小计需要与分组报表配合使用,一般情况下,小计行放在Group Footer区域中。

如果需要设置合计,可以按照以下方式设置。设置完毕后在“Group Footer”域中引用此变量即可。

在“Outline”区中的“Variable”节点上点击鼠标右键,选择“Create Variable”,新增加一个变量

在右侧的“属性”区中,可以设置新增的变量的属性。

各属性解释如下:

Name:变量的名称。

Variable Class Name:变量的数据类型。此处根据数据库的不同,字段类型的不同,选择不同的数据类型。例如,Oracle的数值型字段均定义为Number型,则此处需要选择“java.math.BigDecimal”;若为SQL ServerMySQL数据库,整型为Integer,则此处选择“java.lang.Integer”。如此类推。

Calculation:计算函数。此处选择求和,即Sum

Expression:变量计算公式。可以在此处输入变量统计时计算的公式,可以使用系统中的变量、字段等资源,通过调用不同的方法,实现公式的设置。本例中,公式设置为“new java.math.BigDecimal($F{XS}.intValue())”,即累加XS字段的整型值。

Initial Value Expression:变量重置时初始值。不可以留空。例如,本例中使用“new java.math.BigDecimal(0)”赋予0

Increment type:增长类型。表示变量增长的计算范围。此处选择“None”,即不继续增长。

Incrementer Factory Class:增长工厂类。一般用不到。

Reset type重置类型。表示变量在什么时候做重置操作。此处选择“Group”,当分组变化时,即重新合计。

2.2.7.3. 合计

2.2.7.3.1. 表头合计

表头合计,即在Detail区之前需要读取合计值,此时需要使用SQL语句预先求出数值。

可以采用在Select语句中嵌套子语句实现,如下:

select

d.maintitle as maintitle,

(Select sum(s.cs) From SonData s Where s.pid=d.id) as t_cs

From

FatherData d

说明:

FatherData是父表;SonData是子表,在这个Sql语句中,通过嵌套的Select语句,动态求出当子表的pid值等于父表id值时,子表cs字段的和,填充到父表记录列表中的t_cs字段中。

通过SQL语句取出合计值后,添加Field后,即可在模板中调用此值。

2.2.7.3.2. 表尾合计

如果需要设置合计,可以按照以下方式设置。设置完毕后在“Summary”域中引用此变量即可。

注意:合计类变量只有在Summary域中才有效!!

在“Outline”区中的“Variable”节点上点击鼠标右键,选择“Create Variable”,新增加一个变量

在右侧的“属性”区中,可以设置新增的变量的属性。

各属性解释如下:

Name:变量的名称。

Variable Class Name:变量的数据类型。此处根据数据库的不同,字段类型的不同,选择不同的数据类型。例如,Oracle的数值型字段均定义为Number型,则此处需要选择“java.math.BigDecimal”;若为SQL ServerMySQL数据库,整型为Integer,则此处选择“java.lang.Integer”。如此类推。

Calculation:计算函数。此处选择求和,即Sum

Expression:变量计算公式。可以在此处输入变量统计时计算的公式,可以使用系统中的变量、字段等资源,通过调用不同的方法,实现公式的设置。本例中,公式设置为

new java.math.BigDecimal($V{sum_cs}.intValue()+$F{mx_cs}.intValue())

Initial Value Expression:变量重置时初始值。不可以留空。例如,本例中使用“new java.math.BigDecimal(0)”赋予0

Increment type:增长类型。表示变量增长的计算范围。此处选择“group”,即在分组范围内进行累加。

Incrementer Factory Class:增长工厂类。一般用不到。

Reset type重置类型。表示变量在什么时候做重置操作。此处选择Group,当分组变化时,即重新合计。

上例中的“合计”,为每个分组之间的合计,也可以理解为“小计”。合计还有其他几种方式:

1、 累计合计,即总计。Reset typeIncrement type均选择Report

2、 本页合计,即合计当前页的值。Reset type选择PageIncrement type选择Report

2.3. 报表设计器进阶

2.3.1. 分组报表

当数据分为两层表时,经常需要批量打印子表的数据。打印时,常常需要按照父表的外键或关联值进行自动分组,即每一条父表记录所属的子表记录打印到一组报表中,每组报表都单独计数及计算页数。

在应用中,可以通过选择需要打印的父表记录,将父表记录的ID传入,由报表自动进行分组。

示例:

1、 设置报表查询语句,输入如下SQL语句:

select

wjh.filingcode as filingcode,

wj.note as note

from DAT_ARCHIVE_GDWJ wj left join DAT_ARCHIVE_GDWJH wjh

on wj.pid=wjh.id order by wj.pid

此处一定要用分组的字段进行排序,否则生成的报表是错误的。

2、 新建报表群组

选中报表名称点击右键,选择菜单中的“Create Group”。

系统显示分组创建向导界面。

第一个界面中,需要设置分组的名称、分组字段。也可以设置按照指定的函数、方法处理后进行分组。

本例将“Group name”设置为“pid”,按照字段“pid”进行分组。设置完毕,点击“Next”。

系统显示细节设置界面。此处可以设置是否加入“group header”和“group footer”区。建议保持默认选中,加入这两个区域,这样可以控制在每组报表的结尾,打印相应的信息,例如统计信息或者父表所属的字段内容等。

设置完毕,点击“Finish”即可。

3、 放置报表数据

将需要作为表头打印的内容拖入pid Group Header1栏,将字段拖入detail栏,将每个分组结尾需要打印的内容放入pid group footer1栏,将页脚需要打印的内容放入Page Footer栏,如下图。

4、 设置分组分页打印

选择分组表头,在右侧的属性栏中可以设置分页打印的选项,如下图。

Start on a new page”,即在新页面打印分组头和分组尾。

Reset page number”,即新页面中重置页码。

2.3.2. 图形报表

1、 设置报表查询。例如,在查询设置界面中输入如下SQL语句。

Select t2.deptName,count(t1.empId) as empCount

From employee t1

Left join department t2 on t1.deptId=t2.deptId

Group by t2.deptName

2、 删除一些报表栏。将columnHeader.detail.colmnFooter等栏高度设置为0

3、 增加Summary栏的高度,设为400

4、 插入饼图,放置在Summary栏。选择如图所示的按钮,插入图形报表。

选择三维饼图。

5、 点击“Next”,可设置饼图的参数。

6、 查看结果。

2.3.3. 子报表

2.3.3.1. 制作父报表

首先制作父报表,就是调用子报表的一个基础报表。

如果父报表中需要显示数据,在SQL编辑器中输入SQL语句,查询出需要的字段,将字段加入到报表中即可。

如果父报表不需要显示任何数据,只是作为子报表的载体,那么也需要在SQL编辑器中输入语句,并且需要能查询出记录,系统才会在生成报表时显示父报表,否则,系统会显示一个空白报表。

本系统中,建议输入“select id from sys_user where user_name='admin'”,只查询出一条记录即可使报表正常生成。

2.3.3.2. 制作子报表

点击组件面板上的“Subreport”按钮,拖动到报表工作区上。

系统会自动弹出子报表选择窗口。可以选择创建一个新报表,还是使用一个已有的报表作为子报表。

选择“Create a new report”,可以立即制作新的子报表;如果选择“Select an existing report”,则可以调用已经有的报表作为子报表;如果选择“Just create the subreport element”,系统会生成一个子报表区,可以在之后挂接需要的子报表。

选择“Create a new report”的,点击 Next”会出现“选择纸型”界面。本例中选择纵向的A4纸,即“Blank A4”。

选择完毕,点击“Next”,系统显示文件存储设置页面,在此处设置子报表文件存放在何处。

选择完毕,点击“Next”,系统显示“Data Source”界面。需要在此处选择数据连接,并输入SQL语句,来控制子报表数据的查询范围。

点击“Next”按钮,系统显示“Fields”界面。可以在此处选择子报表中显示的字段。

点击“Next”按钮,系统显示“Group By”界面。可以在此处设置子表的分组字段。

点击“Next”按钮,系统显示“Connection”界面。默认使用与父报表相同的数据连接,也可以选择使用其他指定的数据连接。

点击“Next”按钮,系统显示“Subreport Parameters”界面,在此处可以设置从父表需要传入子表的变量,一般都是关联字段的值。

子报表如果想与父报表联动工作,需要通过参数传递,将父报表中的值传递给子报表。

在“Name”中输入参数的名字,在“Expression”中输入参数的公式。公式可以使用系统的公式生成器自动生成。设定好后。点击“Finish”按钮即可。

系统自动显示子报表界面,如下所示。

可以在此处修改子报表的格式。修改完毕后,保存即可。

设置完毕后,主报表显示如下。

2.3.3.3. 子报表自适应行高

在准备放置子报表的区域,先放置一个Field域,删除关联的字段值,即放置一个空白域。设置此域为自动扩展行高。设置如下。

其中,“Stretch Type”选项,选择“Relative to Band Height”。

子报表的field域设置为自动扩展行高。

父报表中的子报表域设置为取当前行最高值,即“Stretch Type”选项,选择“Relative to Tallest Object”。如此设置即可。

免费下载 Word文档免费下载: JasperReport5.6.1编码及Studio使用

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服