使用jasperreposts生成报表:
我总结了三种方法, 说方法之前呢,先来点开胃的,导包(我这里使用的是最细发布的4.1.1,工具Eclipse, struts2 +Spring+iBatis)
(我这里的包是单独使用的时候的)
开始:
第一种方法:在后台生成报表保存到本地,然后再读取到jsp页面中
1).后台生成报表的工具类
package wohai.base.util.util_jasperreports;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSour
ce;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import unite.bean.test.UserBean;
public class JrtsUtil {
public static void generatePDF(String reportTitle, String reportFilePath,List<Object> list) throws IOException
{
// TODO Auto-generated method stub
//begCustNo,endCustNo分别为查询传入的开始编号,结束编号.
//jdbcCustomerDao = new JdbcCustomerDao();
ByteArrayOutputStream outPut = new ByteArrayOutputStream();
Map parameters = new HashMap();//参数设定
parameters.put("lie", reportTitle);//报表标题
//List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);
try {
JRBeanCollectionDataSour
ce ds = new JRBeanCollectionDataSour
ce(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
JRPdfExporter pdfexporter = new JRPdfExporter();
pdfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
//设置输出流
pdfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outPut);
//如果保存到硬盘用下面语句
// pdfexporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "e:\\report1.pdf");
pdfexporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.FALSE);
//pdfexporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
pdfexporter.exportReport();
FileOutputStream outputStream = new FileOutputStream("e:/report1.pdf");
outputStream.write(outPut.toByteArray());
//输出成XML,PDF,HTML,CSV,XLS(Excel)的任一种文件。
//
OutputStream output = new FileOutputStream(new File("e:/report1.pdf"));
//
//
JasperExportManager.exportReportToPdfStream(jasperPrint,output);
} catch (JRException e) {
e.printStackTrace();
}finally{
outPut.flush();
outPut.close();
}
}
public static void main(String[] args) throws IOException {
try {
List<UserBean> list = new ArrayList<UserBean>();
UserBean userBean = new UserBean();
userBean.setName("sdf");
userBean.setPassword("gg");
list.add(userBean);
//getCode();
generateHtml("mao","/iReport/report1.jasper",list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static
void generateHtml(String reportTitle, String reportFilePath,List<UserBean> list) throws IOException
{
// jdbcCustomerDao = new JdbcCustomerDao();
ByteArrayOutputStream outPut = new ByteArrayOutputStream();
Map parameters = new HashMap();//参数设定
parameters.put("lie",reportTitle );
//List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);//获取数据
JRHtmlExporter exporter = new JRHtmlExporter();//创建对象
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
try {
JRBeanCollectionDataSour
ce ds = new JRBeanCollectionDataSour
ce(list);
// 用数据填充JasperReport文件
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
Boolean.FALSE);
// 设置导出JASPER_PRINT
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
// 导出编码格式
exporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "utf-8");
// 设置导出流
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outPut);
//报表边框图片设置"report/image?image=",report为你的报表及PX图片所在目录
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "report/image?image=");
//执行导出
exporter.exportReport();
// System.out.println(System.getProperty("user.dir"));
String nowpath = System.getProperty("user.dir");
String tempdir=nowpath.replace("bin", "webapps");
String path = tempdir +"/"+ Jasper_Util.getCode("download_mkdir");
System.out.println(tempdir);
try {
Jasper_Util.checkExist(path);//判断目录是否存在
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileOutputStream outputStream = new FileOutputStream(path+"/"+reportTitle+".html");
outputStream.write(outPut.toByteArray());
} catch (JRException e) {
e.printStackTrace();
}finally{
outPut.flush();
outPut.close();
}
}
public static void generateExcel(String reportTitle, String reportFilePath,List<Object> list) throws IOException {
//jdbcCustomerDao = new JdbcCustomerDao();
ByteArrayOutputStream outPut = new ByteArrayOutputStream();
Map parameters = new HashMap();//参数设定
parameters.put("lie", "select * from User");
//List list = jdbcCustomerDao.getAllCustomer(begCustNo, endCustNo);
JRXlsExporter exporter = new JRXlsExporter(); // Excel
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
try {
JRBeanCollectionDataSour
ce ds = new JRBeanCollectionDataSour
ce(list);
//填充数据
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
outPut);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE);// 删除记录最下面的空行
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
Boolean.FALSE);// 删除多余的ColumnHeader
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
Boolean.FALSE);// 显示边框
exporter.exportReport();
FileOutputStream outputStream = new FileOutputStream("e:/report1.xls");
outputStream.write(outPut.toByteArray());
} catch (JRException e) {
e.printStackTrace();
}finally{
outPut.flush();
outPut.close();
}
}
}
2).action
package unite.action.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import wohai.base.action.BaseAction;
import wohai.base.util.util_jasperreports.Jasper_Util;
import wohai.base.util.util_jasperreports.JrtsUtil;
@SuppressWarnings("serial")
public class Jasper_UpLoadAction extends BaseAction {
private String reportTitle;//报表的名字
private List sourseList = new ArrayList();
//获得下载文件的内容,可以直接读入一个物理文件或从数据库中获取内容
public InputStream getInputStream() throws Exception {
String nowpath = System.getProperty("user.dir");
String tempdir=nowpath.replace("bin", "webapps");
String path = tempdir +"/"+ Jasper_Util.getCode("download_mkdir");
File file = new File(path+"/"+reportTitle+".html");
if (file.exists()) {
InputStream inputStream = new FileInputStream(file);
//下载文件
return inputStream;
}
return null;
}
public static String getDownloadFileName(String name) {
String downFileName = name;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (Exception e) {
e.printStackTrace();
}
return downFileName;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
reportTitle = getDownloadFileName(request.getParameter("reportTitle"));
JrtsUtil.generateHtml(reportTitle,Jasper_Util.getCode("jasper_mkdir"),sourseList);
return SUCCESS;
}
public String getReportTitle() {
return reportTitle;
}
public void setReportTitle(String reportTitle) {
this.reportTitle = reportTitle;
}
public List getSourseList() {
return sourseList;
}
public void setSourseList(List sourseList) {
this.sourseList = sourseList;
}
}
3).用到的辅助工具类
public static String getCode(String key){
Locale locale1 = new Locale("zh", "CN");
ResourceBundle resb = ResourceBundle.getBundle("jasper", locale1);
System.out.println(resb.getString(key));
return resb.getString(key);
}
//.properties配置文件里存放是我要用到的路径
public static void checkExist(String filepath) throws Exception{
File file=new File(filepath);
if (file.exists()) {//判断文件目录的存在
}else {
System.out.println("文件夹不存在!3");
file.mkdirs();
}
}
我总结了三种方法, 说方法之前呢,先来点开胃的,导包(我这里使用的是最细发布的4.1.1,工具Eclipse, struts2 +Spring+iBatis)
(我这里的包是单独使用的时候的)
开始:
第一种方法:在后台生成报表保存到本地,然后再读取到jsp页面中
1).后台生成报表的工具类
package wohai.base.util.util_jasperreports;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSour
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import unite.bean.test.UserBean;
public class JrtsUtil {
//
//
//
}
2).action
package unite.action.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import wohai.base.action.BaseAction;
import wohai.base.util.util_jasperreports.Jasper_Util;
import wohai.base.util.util_jasperreports.JrtsUtil;
@SuppressWarnings("serial")
public class Jasper_UpLoadAction extends BaseAction {
}
3).用到的辅助工具类