a).用ireport制作报表模板,设定查询约束参数以接受查询约束,编译报表。
b).编写程序PdfManager ,接收jasper文件,查询数据库,生成报表
-----------------------------------------------------------------------------------------------------------------------------------------
package com.stake.mis.baobiao;
import net.sf.jasperreports.engine.*;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import com.stake.comm.db.DbconnManager;
public class PdfManager
{
/**
* filename: 获取编译后的报表;
* response: 获取响应;
* map: 获取查询约束参数;
* attachname: 获取报表名称;
/
public static void getPdf(String filename,HttpServletResponse response,HashMap map,String attachname) throws SQLException, JRException, IOException
{
//报表编译之后生成的.jasper 文件的存放位置
File reportFile = new File(filename);
//新建输出流对象;
ServletOutputStream out = response.getOutputStream();
//连接到数据库
Connection conn = DbconnManager.getInstance().getConnection();
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), map, conn);
//设置文件类型;
response.setContentType("application/pdf");
//
response.setContentLength(bytes.length);
//设置页头, 文件打开方式, 对中文文件名的编码处理;
response.addHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(attachname, "utf-8"));
//
out.write(bytes, 0, bytes.length);
out.flush();
out.close();
out = null;
reportFile = null;
conn.close();
}
}
c).action中获得查询约束后的程序片段: 调用PdfManager 生成PDF
---------------------------------------------------------------------------------------------------------------------------------------------
try
{
//jasper 是编译后的报表文件 某某报表.jasper 所在的文件夹;
String filename = this.getServlet().getServletContext().getRealPath("/jasper/maincardset.jasper");
HashMap map = new HashMap();
//sql是查询约束;
map.put("SQLQUERY", sql);
//其他参数;
map.put("其他参数", 其他参数);
//生成报表;
PdfManager.getPdf(filename, response,map,"某某报表.pdf");
}catch (Exception e)
{
e.printStackTrace();
}