本示例说明如何使用DynamicReports和JasperReports生成简单的报告。 DynamicReports是一个Java报告库,使您可以生成可以导出为许多流行格式的报告文档。 它基于著名的JasperReports库。
本文使用的工具:
- DynamicReports 3.1.3
- JasperReports 5.0.4
- MySQL 5.5
- Maven 3
- JDK 1.6.0
1.下载DynamicReports
从官方网站下载DynamicReports。 如果使用Maven,则可以从Maven中央存储库下载它。 对于Maven项目,将以下配置添加到pom.xml文件:
<dependencies>
<!-- DynamicReports -->
<dependency>
<groupId>net.sourceforge.dynamicreports</groupId>
<artifactId>dynamicreports-core</artifactId>
<version>3.1.3</version>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies>
2.报告数据源
使用JDBC驱动程序连接到MySQL数据库。
Class.forName("com.mysql.jdbc.Driver");
Connection connection =
DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
3.报表制作工具
假设MySql服务器包含一个数据库表customers,并且customers表具有以下结构:
栏名 | 数据类型 |
ID | 整型 |
名字 | varchar(50) |
姓 | varchar(50) |
日期 | 日期 |
我们将创建一个报告,该报告将从表中获取所有客户,并将数据放入报告中。
3.1创建一个新的空报告对象。
JasperReportBuilder report = DynamicReports.report();
3.2现在为每个数据库列创建一个报告列。
Columns.column("Customer Id", "id", DataTypes.integerType())
第一个参数是列标签,该标签将显示在报告标题中。
第二个参数是列名,此名称应与数据库列名相同。
第三个参数是列的Java类型。
3.3添加报告列。
report
.columns(
Columns.column("Customer Id", "id", DataTypes.integerType()),
Columns.column("First Name", "first_name", DataTypes.stringType()),
Columns.column("Last Name", "last_name", DataTypes.stringType()),
Columns.column("Date", "date", DataTypes.dateType()))
3.4在报告中添加标题文本和页码。
.title(//title of the report
Components.text("SimpleReportExample")
.setHorizontalAlignment(HorizontalAlignment.CENTER))
.pageFooter(Components.pageXofY())//show page number on the page footer
3.5最后设置数据源查询和连接。
.setDataSource("SELECT id, first_name, last_name, date FROM customers ", connection);
4.完整的例子
package net.sf.dynamicreports.examples;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.report.builder.DynamicReports;
import net.sf.dynamicreports.report.builder.column.Columns;
import net.sf.dynamicreports.report.builder.component.Components;
import net.sf.dynamicreports.report.builder.datatype.DataTypes;
import net.sf.dynamicreports.report.constant.HorizontalAlignment;
import net.sf.dynamicreports.report.exception.DRException;
public class SimpleReportExample {
public static void main(String[] args) {
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://hostname:port/dbname","username", "password");
} catch (SQLException e) {
e.printStackTrace();
return;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
JasperReportBuilder report = DynamicReports.report();//a new report
report
.columns(
Columns.column("Customer Id", "id", DataTypes.integerType()),
Columns.column("First Name", "first_name", DataTypes.stringType()),
Columns.column("Last Name", "last_name", DataTypes.stringType()),
Columns.column("Date", "date", DataTypes.dateType()))
.title(//title of the report
Components.text("SimpleReportExample")
.setHorizontalAlignment(HorizontalAlignment.CENTER))
.pageFooter(Components.pageXofY())//show page number on the page footer
.setDataSource("SELECT id, first_name, last_name, date FROM customers",
connection);
try {
//show the report
report.show();
//export the report to a pdf file
report.toPdf(new FileOutputStream("c:/report.pdf"));
} catch (DRException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
5.运行
运行SimpleReportExample类。
图片:将创建一个pdf文件。
下载源代码
下载它– JavaDynamicReports-Example.zip (11 KB)
参考文献
翻译自: https://mkyong.com/java/reporting-in-java-using-dynamicreports-and-jasperreports/