java struts2 JasperReports 生成pdf文件

本文介绍使用JasperReport模板结合Java代码实现PDF文件的自动生成方法。通过具体示例展示了如何加载模板、填充数据并导出PDF文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jasperreport


JAVA生成PDF,最常见的是采用itext组件来动态构建PDF文件,但仅仅用itext生成的PDF,只能靠人为的一点一点来用代码来控制PDF的格式,不能达到可视化的效果。

因此,在这里,我主要介绍的是采用jasperreport模版来定制生成PDF。

1、用ireport定制一个jasperreport的模版

2、用java操作此模版

第1步,这里就不做介绍,很简单的,几乎是所看即所得的视图操作



第2步,大家请看我的java代码,已经测试过,没有问题

注意:下面代码是运行在java1.5或更高版本

需要额外导入jasperreports-3.0.0.jar,itext-1.3.1.jar,iTextAsian.jar三个jar包



package product.file.report.jasperreport;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import product.file.report.ReportGenerater;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import net.sf.jasperreports.engine.fill.JRFiller;
import net.sf.jasperreports.engine.util.JRLoader;

@SuppressWarnings("unchecked")
public class JasperGenerater implements ReportGenerater{

//生成PDF
public void generatePdf(String template, String output, Map param, Map<String, List<Map>> datasource){

JasperReport jasper = this.loadTemplate(template); //加载japserreport模版
JasperPrint jPrint = this.fileReport(jasper, param, datasource); //填充数据
try {
JasperExportManager.exportReportToPdfFile(jPrint, output); //生成PDF文件
} catch (JRException e) {
throw new RuntimeException();
}
}

//生成Html
public void generateHtml(String template, String output, Map param, Map<String, List<Map>> datasource){
JasperReport jasper = this.loadTemplate(template); //加载japserreport模版
JasperPrint jPrint = this.fileReport(jasper, param, datasource); //填充数据
try {
JasperExportManager.exportReportToHtmlFile(jPrint, output); //生成html文件
} catch (JRException e) {
throw new RuntimeException();
}
}

//生成PDF输出流
public void generatePdf(String template, OutputStream os, Map param, Map<String, List<Map>> datasource){

JasperReport jasper = this.loadTemplate(template); //加载japserreport模版
JasperPrint jPrint = this.fileReport(jasper, param, datasource); //填充数据
try {
JasperExportManager.exportReportToPdfStream(jPrint, os); //生成PDF文件流
} catch (JRException e) {
throw new RuntimeException();
}
}

//加载报表模版
private JasperReport loadTemplate(String template){
try {
JasperReport jasper = (JasperReport)JRLoader.loadObject(template);
return jasper;
} catch (JRException e) {
throw new RuntimeException("JRException");
}
}

//填充报表数据
private JasperPrint fileReport(JasperReport jasper, Map param, Map<String, List<Map>> datasource){
Set keyset = datasource.keySet();
Iterator itor = keyset.iterator();
while(itor.hasNext()){
String tokey = String.valueOf(itor.next());
JRDataSource jrDs = new JRMapCollectionDataSource(datasource.get(tokey));
param.put(tokey, jrDs);
}

try {
JasperPrint jPrint = JRFiller.fillReport(jasper, param);
return jPrint;
} catch (JRException e) {
throw new RuntimeException();
}
}

//测试Main
public static void main(String[] args){
JasperGenerater jasperGenerater = new JasperGenerater();
String template = "D://编程工具//ireport//user.jasper"; //jasper模版
String outputfile = "D://测试.PDF"; //输出路径

Map<String,List<Map>> datasource = new HashMap<String,List<Map>>(); //数据源;可为多List
List<Map> list = new ArrayList<Map>();
for(int i=0; i<10; i++){
Map cur = new HashMap();
cur.put("USER_ID", "USER"+i);
cur.put("USER_NAME", "用户"+i);
cur.put("LOGIN_COUNT", i);
list.add(cur);
}
datasource.put("REPORT_DATA_SOURCE", list); //指定数据源

Map param = new HashMap(); //参数

param.put("title", "用户登陆统计");
param.put("date", "2009.01.01——2009.08.08");
jasperGenerater.generatePdf(template, outputfile, param, datasource); //生成PDF文件

}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值