【转载】关于报表生成工具jasper的使用说明

最近在用jasper开发报表项目,第一次使用jasper开发报表,这份文档出自于技术平台小组姚老弟之手,觉得总结的很不错遂记录博客,转载或转发请注明作者;姚老弟!!
JasperReport使用
1.编写设计模板(.jrxml文件)
(1)元素
: jrxml文件根元素

: 声明以检索报表结果的SQL语句,若数据源是JavaBean则为空

: 声明参数,在报表填充阶段以Map参数传入

: 声明用于从数据源或查询数据映射到报表模板。
: 包含于,标识数据源中的字段名称

	<field name="Country" class="java.lang.String">
	    <fieldDescription><![CDATA[country]]></fieldDescription>
	</field>

: 声明排序字段

: 声明变量,可用于计数、求和、平均、最低、最高、方差等计算

: 定义不依赖于任何数据源,变量,参数或报表表达式静态文本

: 定义结果字段。

: 包含显示在报表中的数据。

报表区段(section):

:标题 :页眉 :列头 :分组头 :数据显示区域 :分组脚 :列尾 :页脚 :末页脚 :总结 :空数据集时显示的静态文本(将根元素属性whenNoDataType设置为NoDataSection) :背景

所有上述报表区段都是可选的。每一节都包含一个单一的元素作为其唯一的子元素(detail可有多个band)。一个可以包含零个或多个下列子元素:
, , , , , , , or
这些元素都必须包含一个作为其第一个元素(除了elementGroup)。
下表总结了属性:
属性 描述 有效值
x 指定频带元件的x坐标。 一个整数值,表示以像素为单位的元素的x坐标。此属性是必需的。
y 指定频带元件的y坐标。 一个整数值,表示在y以像素为元素的坐标。此属性是必需的。
width 指定频带元件的宽度。 一个整数值,表示该元素的宽度以像素为单位。此属性是必需的。
height 指定频带元件的高度。 一个整数值,表示以像素为元素的高度。此属性是必需的。
key 带元素的唯一标识符。 唯一字符串值。
stretchType 指定包含带延伸当元素如何延伸 NoStretch (default): 该元素不会延长。
RelativeToTallestObject: 该元素将伸展以适应它的组的最高的对象。
RelativeToBand: 该元素将延伸到适合带的高度。
positionType 指定当频带延伸元素的位置。 Float: 元素将取决于周围元件的尺寸移动。
FixRelativeToTop (default): 该元素将保持一个固定的位置相对于带的顶部。
FixRelativeToBottom: 该元素将保持一个固定的位置相对于带的底部。
isPrintRepeatedValues 如果指定的值重复打印。 true (default): 重复的值将被打印出来。
false: 重复的值将不被打印出来。
mode 指定元素的背景模式 不透明的,透明的
isRemoveLineWhenBlank 如果指定了当它是空白,并有在相同的水平空间没有其他元素的元素应被删除。 true, false
isPrintInFirstWholeBand 如果指定的元素必须打印在整个频段,也就是说,未被报表的页面或列之间分割的波段。 true, false
isPrintWhenDetailOverFlows 指定是否当频带溢出到新页或列中的元素将被打印出来。 true, false
printWhenGroupChanges 指定在指定的组改变元素将被打印。 string值
forecolor 指定元素的前景色。 无论前面加上#字符,或以下预定义值中的一个十六进制RGB值:black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, yellow, white.
backcolor 指定元素的背景颜色。 同样作为有效值的前景色

(2)表达式
字段引用: $F{XXX}
变量引用: $V{XXX}
参数引用: P X X X 资 源 包 引 用 : P{XXX} 资源包引用: PXXX:R{XXX}
条件表达式:{cond} ? {语句1} : {语句2}
(3)变量
Calculation属性:
Count − 非空值计算.

First − 变量表达式的第一个实例的值.

Highest − 表达式最大值.

Lowest − 表达式最小值.

Nothing − 不对表达式进行计算.

StandardDeviation − 变量值是与报表表达式匹配的所有非空值的标准差。仅对数字变量有效.

Sum − 表达式非空值总和.

System − 变量值是自定义计算(使用JasperReports的scriptlet功能自行计算该变量的值).

Variance − 变量值是通过评估报表变量的表达式返回的所有非空值的方差.
IncrementType(决定了何时增量计算):
Column − 在每列的末尾重新计算变量值.

Group − 当incrementGroup指定的组更改时,将重新计算变量值.

None − 每条记录都重新计算表达式.

Page − 每页尾重新计算表达式.

Report − 在报告结束时重新计算变量值一次.
IncrementGroup:
当incrementType为Group时,这将确定重新计算变量值的组的名称。这将获取JRXML报告模板中声明的任何组的名称。
ResetType(决定了何时重置变量的值):
Column − 变量值在每列的开头重置.

Group − 当incrementGroup指定的组更改时,将重置变量值.

None − 不会重置变量值.

Page − 变量值在每个页面的开头重置.

Report − 变量值仅在报告开头重置一次.

2.编译模板文件为.jasper文件
JasperFilePath = JasperCompileManager.
compileReportToFile(templatePath);
3.生成数据源
(1)JavaBean数据源:
得到数据集:
List list = getDao.query();
将数据集作为参数传入JRBeanCollectionDataSource构造函数得到实例:
JRBeanCollectionDataSource conn = new JRBeanCollectionDataSource(dataList);

(2)JDBC数据源:
在模板中定义sql语句:
如:<![CDATA [select * from tableName]]>
sql参数传入:
通过表达式传入参数:
如:<parameter name =“name”class =“java.lang.String”/>
<![CDATA [select * from user where name = $P{name} ]]>

P 表 达 式 会 处 理 字 符 串 的 双 引 号 , 若 想 操 作 s q l 语 句 本 身 , 使 用 P{}表达式会处理字符串的双引号,若想操作sql语句本身,使用 Psql使P!{}表达式,
如:
<parameter name =“OrderClause”class =“java.lang.String”/>
<![CDATA [SELECT * FROM user ORDER BY $ P!{OrderClause}]]> </ queryString>
+
sql语句中条件查询建议使用表达式$X{functionName, param1, param2,…}代替where语句,该表达式能处理大多数空值问题,不会出现where column=null导致查询语句错误,表达式详细用法见:
http://jasperreports.sourceforge.net/sample.reference/query/
Java代码中创建jdbc连接:
String url = “xxxxx”;
Class.forName(“xxx”);
Connection conn = DriverManager.getConnection(url, “root”, “root”);
(3)其他数据源
详细可见:
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRDataSource.html

4.导入.jasper文件、参数、数据源填充报表生成.jrprint文件
定义参数
Map parameters = new HashMap();
parameter.put(“author”,”yaowq”);
Parameter.put(“title”,”masCurrencyInfo”);
用JasperFillManager类填充报表
printFileName = JasperFillManager.fillReportToFile(JasperFilePath , parameters,
conn);//printFileName为jrprint文件路径
Jasperreport的填充过程
1.title:报表最开始
2.pageHeader:title之下和之后的每一页最上方
3.columnHeader:每存在detail数据的页的数据上方
4.(*坑)detail:数据集中每有一个元素,填充一次detail
5.columnFooter:每存在detail数据的页的数据下方
6.pageFooter:每一页最下方
7.lastPageFooter:最后一页的页脚,会替代pageFooter
8.summary:总结的内容
9.noData:空数据源时填充的内容
10.background:每页的背景
5.由.jrprint文件导出报表
(1)PDF
JasperExportManager.exportReportToPdfFile(printFileName,destFileName);
(2)HTML
JasperExportManager.exportReportToHtmlFile(printFileName,destFileName);
(3)EXCEL
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME, printFileName);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,destFileName);
exporter.exportReport();
(4)etc.
6.使用JasperSoft Studio生成报表模板
Window>>preferences>>jaspersoft studio>>compatibility选择相应的JasperReports版本,否则可能出现兼容性问题
File>>new>>Jasper Report选择相应的jrxml文件模板
通过拖拽向模板添加元素。outline窗口中可以看到整个xml的树形结构,选中相应元素,在右下角窗口编辑元素属性
报表实例:
1.使用jasper studio生成jdbc数据源的简单报表
创建模板:

选择数据源:

输入sql语句,jasper使用jdbc执行sql后获得的数据集来填充detail区段

添加字段声明:

添加group声明,添加后会按group声明字段组织数据:

生成报表后可点击preview预览报表

2.主子报表(jdbc数据源)
创建子报表
在jasper studio中通过拖拽向detail中添加subReport元素,选择生成新的报表:

选择子报表数据源并输入sql语句:

选择使用与主报表相同的jdbc连接:

由主报表向子报表传入参数,参数可使用表达式,见1.1.2:

完成子报表的创建。注意:主报表中 columnWidth < pageWidth,所以子页面的pageWidth应设置成主页面的columnWidth,否则子页面不居中,甚至可能溢出主页面的范围。

主子报表的数据组织:
注意detail的填充方式,jasper根据报表的填充数据集,使用迭代器依次获取数据来填充detail,所以,若要生成主表与字表分离的报表,需要将主表和字表都写入subreport中进行展示,且保证主报表的sql语句只产生一条数据(如count(*))。
假设需要从下表得到主子表分离的报表:
Country City Population
China Shanghai 2m
China Beijing 2m
Japan Tokyo 0.5m
Japan Osaka 0.5m
America New York 1m
America San Francisco 1m

报表的结构示意为:
mainReport:{
Sql: select count(*) from table //detail填充一次
Detail:{
subReport1:{
Sql: select distinct country from table// detail填充3次,在detail
中输出相应的field
Detail: KaTeX parse error: Expected 'EOF', got '}' at position 12: F{country} }̲ subReport2:{ S…F{country}):{
Sql: select * from table where country=$P{country}// detail根
据表中记录的不同国家的城市个数填充
Detail: $F{City}, KaTeX parse error: Expected 'EOF', got '}' at position 15: F{Population} }̲ } } } } 3.主子报表…F{citys})

报表结构与jdbc数据源结构相同。

通过筛选打印数据,只有中的表达式为true时才会打印所在元素,在jasper studio中可在outline选中该元素,在窗口右下角编辑元素print when expression:

Jasperreport教程:
https://www.tutorialspoint.com/jasper_reports/index.htm
官方文档:http://jasperreports.sourceforge.net/api/overview-summary.html

再次声明,转载注明出处:姚老弟!!

### 回答1: 好的,我可以回答你关于jasperreports生成报表的问题。jasperreports是一款Java开发的报表工具,可以帮助开发者快速生成各种格式的报表。它提供了多种报表元素,如文本、图像、表格等,可以通过简单的配置来生成报表。此外,jasperreports还支持多语言和多种数据源的连接,非常方便实用。 ### 回答2: JasperReports是一个用于生成报表的开源Java库。它通过使用XML文件定义报表模板,将数据源中的数据填充到模板中,并生成输出格式多样的报表。JasperReports可以生成PDF、HTML、XLS、CSV等多种格式的报表使用JasperReports来生成报表一般需要以下几个步骤: 1. 定义报表模板:使用JasperSoft Studio等工具创建或编辑报表模板文件,模板文件以XML格式保存。在模板中,可以指定报表的布局、样式、数据源等信息。 2. 设计数据源:JasperReports支持多种数据源,包括SQL查询、JavaBean、XML文件等。根据实际情况选择合适的数据源,并编写对应的代码或SQL查询语句。 3. 填充数据:通过代码将数据源中的数据填充到报表模板中。可以使用Java代码或JasperReports提供的API来实现数据的填充操作。 4. 生成报表:将填充完数据的报表模板导出为指定的输出格式,如PDF、HTML、XLS等。 使用JasperReports生成报表的好处是灵活性高、可扩展性强。通过使用XML模板定义报表的布局和样式,可以很方便地对报表进行编辑和修改。同时,JasperReports提供了丰富的API和工具,可以满足各种不同的报表生成需求。此外,JasperReports还支持自定义的报表元素和样式,可以根据实际情况进行个性化定制。 总之,JasperReports是一款功能强大且易于使用报表生成工具,可以帮助开发人员快速、灵活地生成各种格式的报表。无论是简单的报表还是复杂的报表,都可以通过JasperReports来实现。 ### 回答3: Jasper Reports是一种开源的Java报表生成工具,它可以帮助开发者快速、灵活地生成各种格式的报表。Jasper Reports提供了强大的报表设计工具,开发者可以使用工具来设计报表模板,设置样式、布局等元素,并通过XML文件进行导出、导入和共享。 Jasper Reports的报表生成过程包括三个关键步骤:数据源准备、报表设计和导出。 首先,需要准备数据源。Jasper Reports支持多种数据源,包括数据库、XML文件、Java对象等。开发者可以根据需要选择相应的数据源,通过查询或组装数据,为报表提供数据内容。 接下来,进行报表设计。开发者可以使用Jasper Reports提供的可视化报表设计工具,通过拖拽和设置属性的方式,创建报表模板。在模板中,可以添加文本、图片、表格、图表等元素,并设置相应的样式和布局。还可以通过添加参数、变量、数据源和子报表等功能,实现更为复杂的报表设计。 最后,进行报表导出。通过调用Jasper Reports提供的API,可以将报表导出为多种格式,如PDF、Excel、HTML、XML等。开发者可以根据需求选择合适的导出格式,并通过设置相应的参数,对导出的报表进行格式美化和内容调整。 总的来说,Jasper Reports是一个功能强大、灵活易用的报表生成工具。它通过提供报表设计工具和API,支持多种数据源和导出格式,为开发者提供了丰富的报表设计和生成的功能。无论是简单的表格报表还是复杂的图表分析,Jasper Reports都能满足开发者的需求,并为用户提供清晰、美观的报表展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值