DynamicReports是一套基于JasperReports的Java报表工具。它可以创建一个动态报表,而且整个过程无需任何界面。你可以在非常短的时间里完成一个报表文档的创建,展示、打印,甚至还能导出成很多通用的文档格式比如PDF、Excel、Word和Html格式;
1 开发环境准备
项目目录结构如下:
Maven的pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.lvuo
lvluo-report
0.0.1-SNAPSHOT
war
net.sourceforge.dynamicreports
dynamicreports-core
${dynamicreports.version}
net.sourceforge.dynamicreports
dynamicreports-adhoc
${dynamicreports.version}
report
org.apache.maven.plugins
maven-compiler-plugin
${project.build.sourceEncoding}
${java.version}
${java.version}
256m
512m
src/main/java
src/test/java
src/main/java
**/*.xml
**/*.json
**/*.png
**/*.ttf
false
1.8
UTF-8
5.0.0
mvnrepository
mvnrepository
http://mvnrepository.com
search
search maven
http://search.maven.org/
2 运行报表
SimpleAdhocReport.java代码来自dr官方实例,稍有简化,直接运行即可。
package net.lvuo.demo;
import java.math.BigDecimal;
import java.util.Date;
import net.sf.dynamicreports.adhoc.AdhocManager;
import net.sf.dynamicreports.adhoc.configuration.AdhocColumn;
import net.sf.dynamicreports.adhoc.configuration.AdhocConfiguration;
import net.sf.dynamicreports.adhoc.configuration.AdhocReport;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.report.datasource.DRDataSource;
import net.sf.dynamicreports.report.exception.DRException;
import net.sf.jasperreports.engine.JRDataSource;
public class SimpleAdhocReport {
public SimpleAdhocReport() {
build();
}
private void build() {
AdhocConfiguration configuration = new AdhocConfiguration();
AdhocReport report = new AdhocReport();
configuration.setReport(report);
AdhocColumn column = new AdhocColumn();
column.setName("item");
report.addColumn(column);
column = new AdhocColumn();
column.setName("quantity");
report.addColumn(column);
try {
JasperReportBuilder reportBuilder = AdhocManager
.createReport(configuration.getReport());
reportBuilder.setDataSource(createDataSource());
reportBuilder.show();
} catch (DRException e) {
e.printStackTrace();
}
}
private JRDataSource createDataSource() {
DRDataSource dataSource = new DRDataSource("item", "orderdate",
"quantity", "unitprice");
for (int i = 0; i < 20; i++) {
dataSource.add("Book", new Date(), (int) (Math.random() * 10) + 1,
new BigDecimal(Math.random() * 100 + 1));
}
return dataSource;
}
public static void main(String[] args) {
new SimpleAdhocReport();
}
}