博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iReport 编辑的报表,在jsp中导出到PDF的代码
阅读量:5955 次
发布时间:2019-06-19

本文共 4295 字,大约阅读时间需要 14 分钟。

 

此处使用了Java BeanCollection作为DataSource。

 

JSP页面代码:

 

<%@ page errorPage="error.jsp" %>
<%@ page 
import="reportDatasource.*" %>
<%@ page 
import="net.sf.jasperreports.engine.*" %>
<%@ page 
import="net.sf.jasperreports.engine.util.*" %>
<%@ page 
import="net.sf.jasperreports.engine.export.*" %>
<%@ page 
import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page 
import="java.util.*" %><%@ page 
import="java.io.*" %>
<%@ page 
import="java.net.URLEncoder" %>
<%@ page 
import="javax.servlet.*" %>
<%@page language="java" contentType="application/x-msdownload"    pageEncoding="UTF-8"%>
<%
      String requestFileName = "LineReport";//报表的名称
      String reportFileName = requestFileName +".jasper";
      String fileDownName = "XXX报表";
      Map parameters = 
new HashMap();
     
//
 parameters.put("ReportTitle", "Address Report"); //向报表传递参数   
      JasperPrint jasperPrint = JavaBeanListDataSoureFactory.createJasperPrintByJavaBeanList(reportFileName, parameters, LocationValueBeanFactory.getPageLoadTimeHistoryLineReportBeanCollection());        
    
       
//
输出
       PathClassPath classpath = 
new PathClassPath();
      String stringpath =  application.getRealPath("/reports/"+reportFileName);
     
      System.out.print("reportFileName="+stringpath);
    
      File sourceFile  =
new File(stringpath);
      
long start = System.currentTimeMillis();
    
      System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
      
//
下载
      response.reset();
//
      response.setContentType("application/x-download");   
      String filedisplay = fileDownName+".pdf";
      filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
      response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
      OutputStream outp = 
null;
    
      
try
      {
          outp = response.getOutputStream();
      
           JasperExportManager.exportReportToPdfStream(jasperPrint, outp);
           
          outp.flush();
      }
      
catch(Exception e)
      {
          System.out.println("Error!");
          e.printStackTrace();
      }
      
finally
      {
          
if(outp != 
null)
          {
              outp.close();
              outp = 
null;
          }
          
//
如下处理 getOutputStream() has already been called for this response 异常
      
          out.clear();
          out = pageContext.pushBody();
      }
%>

 

 

 其中:

LocationValueBeanFactory.getPageLoadTimeHistoryLineReportBeanCollection() 

为返回一个实体的数组的List:

 Arrays.asList( LocationValueBean [] data); 

 

 其中:

 JavaBeanListDataSoureFactory.createJasperPrintByJavaBeanList ()

代码为:

 //本类可能会用到的包:

 //

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
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.j2ee.servlets.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
//

 

 //

       
public 
static JasperPrint  createJasperPrintByJavaBeanList(String reportFileName,Map parameters,Collection collection)
        {
           
            String path = "";
            Properties prop = 
new Properties();
            
try {
                InputStream in = JavaBeanListDataSoureFactory.
class.getClassLoader().getResourceAsStream("report.properties");
                prop.load(in);
                path = prop.getProperty("site.reportjasper.path");
                in.close();
            } 
catch (FileNotFoundException e) {
                e.printStackTrace();
            } 
catch (IOException e) {
                e.printStackTrace();
            }
            JRHtmlExporter exporter = 
new JRHtmlExporter();
            JasperPrint jasperPrint = 
null;
             
//
PathClassPath classpath = new PathClassPath();
            
//
ReadConfigInfo conf = new ReadConfigInfo();
             String reportFileNameResult = path+reportFileName;
            File reportFile = 
new File(reportFileNameResult);
            
if (!reportFile.exists())
                
throw 
new JRRuntimeException("File "+reportFileName+" not found. The report design must be compiled first.");
            parameters.put("ReportTitle", "Address Report");
            parameters.put("BaseDir", reportFile.getParentFile());
            
try {
                
                jasperPrint = 
                    JasperFillManager.fillReport(
                        reportFileNameResult, 
                        parameters, 
                        
new JRBeanCollectionDataSource(collection)
                        );
                
            } 
catch (JRException e) {
                
//
 TODO Auto-generated catch block
                e.printStackTrace();
            }
            
return jasperPrint;
        }

 

 

PS:博客园中的插入代码依然有问题啊,有的时候最上面一行会从代码块中跑出来,有的时候最下面一行会跑出来,我的环境:Win7 x64+Chrome 21.01180.89

 

 

 

转载地址:http://dkexx.baihongyu.com/

你可能感兴趣的文章
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>