20:45
JasperReport
JasperReport提供很多服务,其中我们常用的是JasperReports Liberary,众多产品中的一员。
JasperReport还提供报表服务器产品、ETL产品、报表工具Studio产品、Ireports
Designer产品。
JasperReport还提供多种数据交换工具,如Hadoop Connector、JasperMobile
for Android。
JasperReportsLiberary源码下载
1、http://community.jaspersoft.com
IReport加载环境变量
场景
在制作报表的时候少不了对传递过来的报表数据进行转换(比如将金额转换成3位一逗),这时我们可以使用Java封装出对数据进行转换的类,然后在IReport中调用。
操作
IReport中行的浮动
场景
制作一个报表模板包含columnHeader、detail、columnFooter三个区域,其中detail区域中的数据是循环的,然后因为数据不多造成detail与columnFooter区域出现间隔。
解决办法
需要配置columnFooter为浮动,这样columnFooter与detail的间距就变成动态的了。
IReport列的扩展
场景
报表有多行多列,其中同一行的某些列内容太大需要换行,换行后需要当前行的单元格统计调整高度,在润乾中有单元格跟随扩展的机制,在IReport中需要设置
但不是每个单元格都设置,只需要对出现间隔段的单元格设置成
Ireport#Java调用API打印传数据的规则
场景
jsp查询页==>jsp数据呈现页,该页中有原始数据Bean和[打印]按钮==>点击[打印]按钮==>跳转allReport.jsp==>从request#Session中取数据Bean,适配为报表API可用的数据格式对象,调用报表打印API,报表流转储。
分析
报表API之外数据的流转主要是Request、Session、JSP传递的,这些比较简单,在这些数据要传入报表API时就有些特定的规则,报表API提供了数据结构的封装接口,所有数据提供者必须实现API定义的规范才可以。
图示
示例代码
public class JasperDataSource implements JRDataSource {
private Collection dataBeans;
private Object currBean;
private Iterator iterator;
public void setDataBeans(Collection dataBeans) {
this.dataBeans = dataBeans;
iterator = this.dataBeans.iterator();
}
public boolean next() throws JRException {
if (iterator.next()) {
currBean = iterator.next();
return true;
}
return false;
}
public Object getFieldValue(JRField field) throws JRException {
String fieldName = field.getName();
if (currBean instanceof java.util.Map) {
return ((java.util.Map) currBean).get(fieldName);
}
return null;
}
}
JasperReport#报表编译
编译涉及到的实例
net.sf.jasperreports.engine.JasperReportsContext
|
上下文
|
srcDir
|
jrxml目录
|
destDir
|
编译后的成果物输出目录
|
tempDir
|
临时目录
|
net.sf.jasperreports.engine.JasperCompileManager
|
封装报表编译、转储,对外部提供简单的报表编译API
|
示例
import java.io.File;
import java.io.FileFilter;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.SimpleJasperReportsContext;
import net.sf.jasperreports.engine.design.JRCompiler;
/**
* 编译报表
* @author WangYanCheng
* @version 2013-3-29
*/
public class CompileReport {
/***/
private File jrxmlFile;
private File jasperFile;
private static File tmpFile = new File("D:\\compileReportTemp");
private static File jarPath = new File("D:\\jasper\\jars");
/**
* 构造方法
* @param jrxmlFile 原始报表描述文件
* @param jasperFile 编译报表后输出文件
*/
public CompileReport(File jrxmlFile, File jasperFile) {
this.jrxmlFile = jrxmlFile;
this.jasperFile = jasperFile;
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
}
/**
* 入口
*/
public void doWork() {
JasperReportsContext jasperReportsContext = new SimpleJasperReportsContext();
jasperReportsContext.setProperty(JRCompiler.COMPILER_TEMP_DIR, tmpFile.getAbsolutePath());
jasperReportsContext.setProperty(JRCompiler.COMPILER_KEEP_JAVA_FILE, "true");
jasperReportsContext.setProperty(JRCompiler.COMPILER_CLASSPATH, getClassPath());
try {
JasperCompileManager.getInstance(jasperReportsContext).compileToFile(jrxmlFile.getAbsolutePath(), jasperFile.getAbsolutePath());
} catch (JRException e) {
e.printStackTrace();
}
}
/**
* 报表编译所需环境变量
* @return classpath 环境变量
*/
public String getClassPath() {
StringBuffer sbuf = new StringBuffer(".;");
File[] libFile = scanFile(jarPath, ".*jar$");
for (File pathItem : libFile) {
sbuf.append(pathItem.getAbsolutePath()).append(";");
}
return sbuf.toString();
}
/**
* 文件扫描,取给定格式匹配的文件
* @param dirFile 目录
* @param expStr 匹配表达式
* @return 文件组
*/
private File[] scanFile(File dirFile, final String expStr) {
File[] rtnFile = null;
if (dirFile.isDirectory()) {
rtnFile = dirFile.listFiles(new FileFilter() {
@Override
public boolean accept(File fileInst) {
return fileInst.getName().matches(expStr);
}
});
}
return rtnFile;
}
/**
* 测试入口
* @param args 参数列表
*/
public static void main(String[] args) {
File srcFile = new File("D:\\jasper\\HelloJasper.jrxml");
File destFile = new File("D:\\jasper\\HelloJasper.jasper");
CompileReport cpInst = new CompileReport(srcFile, destFile);
cpInst.doWork();
}
}
分享到:
相关推荐
软件说明: jasperreport 是一款报表打印组件,是开放源代码组织sf.net 中的一个java 报表打印工 程,在我写这篇文章时,jasperreport 的最新版本是0.5.2 版,jasperreport 的最新版本可以 从...
JasperReport实例导入可用
test for jasperreport use to demo
jasperReport 动态合并单元格示例
Jasperreport中文使用手册
57.JasperReport 根据内容动态调整报表行高 56.ireport集合变量进行反填充值 55.乱码分析的可能性 54.删除uuid 因版本的更换会元素会产生uuid 54.竖排文字 53.周围控件位置自适应 52.出现覆盖 52.打印方向 51.打印时...
asperReport的应用,发现大部分都是讲如何将jasper导入一个html或pdf进行打印的例子,并没有直接将jasperReport打印生成一个图像的示例。包括jaspe自带的demo里面,所以有高手就写了如何生成图片的方法
jasperreport 3.75版 jar包 ,修复PDF中中文不能加粗,倾斜等问题。
JasperReport 中交叉报表指南
基于Jasperreport动态单元格合并模板,支持多层分组排序,支持多分组动态合并单元格,附件中有两组以及大于两组的模板实例。
JasperReport报表设计总结 JasperReport报表设计总结
jasperreport创建多个List数据源报表 通多个detail实现多个table效果,简单 快捷
JasperReport Struts2 web 整合所需完整jar ant-1.7.1.jar antlr-2.7.5.jar asm.jar bsh-2.0b4.jar cglib-2.1.jar commons-beanutils-1.7.0.jar commons-beanutils-1.7.jar commons-collections-2.1.jar commons-...
jasperreport 6.4.1报表动态列,以及生成导出html,可直接导入到eclipse中进行运行,包含一个完整的demo
springboot整合JasperReport实现报表功能文章所需的全部资源
jasperReport ireport文档资料 iReport的中文教程 jaspersoft-studio-user-guide_0.pdf jsp调用jasper JasperReport创建多个子报表
JasperReport完整API 3.14
JasperReport中文翻译用户手册,适合新手学习,JasperReport中文翻译用户手册,适合新手学习,
jasperreport+ireport开发java报表入门级教程(完整版)