• iReport 编辑的报表,在jsp中导出到PDF的代码


    此处使用了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

  • 相关阅读:
    修复UBUNTU的NetworkManager applet不见方法
    在 Windows下用 Visual Studio 编译 OpenSSL
    Linux下Firefox汉化方法
    查看SQL Server数据库表、索引视图等占用的空间大小
    Oracle Instant Client的安装和使用
    angular 单页应用程序实现浏览器后退按钮跳转到前一页面,优化用户体验
    十分钟彻底理解javascript 的 this指向,不懂请砸店
    提高前端生产力的小技巧:谷歌开发人员工具保存修改
    十分钟带你入门bootstrap
    做一个自己的字符图标
  • 原文地址:https://www.cnblogs.com/sixiweb/p/2707373.html
Copyright © 2020-2023  润新知