import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.common.base.BaseAction;
import net.sf.jasperreports.engine.JRDataSource;
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.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
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.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.util.JRLoader;
public class ReportPint extends BaseAction{
private HttpServletResponse resp=this.getResponse();
/***
* 报表打印
* jasperName 模板名字
* list单据明细
* parameters单据
* printType打印类型
*/
public void print(String jasperName,List list,Map parameters,String printType){
try{
String root_path = this.getServletContext().getRealPath("/");
root_path = root_path.replace('//', '/');
String reportFilePath = root_path + "WEB-INF/classes/com/zrjxc/system/util/"+jasperName+".jasper";
JRDataSource dataSource = new JRBeanCollectionDataSource(list);
//parameters.put("SUBREPORT_DIR", root_path + "WEB-INF/classes/com/zrjxc/system/util/");//设置子报表路径
JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
OutputStream ouputStream = resp.getOutputStream();
resp.setContentType("application/"+printType);//导出类型(pdf,xls,html)
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-Disposition", "attachment; filename=/""+ URLEncoder.encode(jasperName, "UTF-8") + "."+printType+"/"");//生成文件类型(pdf,xls,html)
this.printStyle(jasperPrint,ouputStream,printType);//控制打印格式
ouputStream.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
//打印格式
public void printStyle(JasperPrint jasperPrint,OutputStream ouputStream,String printType) throws JRException{
if(printType.equals("pdf")){
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter.exportReport();
}else if(printType.equals("xls")){
//使用JRXlsExporter导出器导出excel
JRXlsExporter xlsExporter=new JRXlsExporter();
xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
xlsExporter.exportReport();
}else if(printType.equals("html")){
//使用JRHtmlExporter导出器导出html
JRHtmlExporter htmlExporter=new JRHtmlExporter();
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
htmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
htmlExporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "utf-8");
htmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "servlets/image?image=");
htmlExporter.exportReport();
}else{
//使用JRRtfExporter导出器导出word
JRRtfExporter rtfExporter=new JRRtfExporter();
rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
rtfExporter.exportReport();
}
}
}