动态编译jrxml文件生成html报表

生成html页面的代码如下:调试完成,欢迎探讨。
<%@ page contentType="text/html; charset=GBK" %>
<%@ 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.io.File" %>
<%@ page import="java.sql.*"%>
<jsp:useBean id="hashtable" class="java.util.Hashtable" scope="request"/>
<%
String rpt_id="",branch_id="",jasper_name="",user_id="",REPORT_STS_ID="",srpt_id="",item_id="";
if(hashtable!=null){
  if(hashtable.get("rpt_id")!=null){
    rpt_id=(String) hashtable.get("rpt_id");
    System.out.println(rpt_id);
  }
  if(hashtable.get("branch_id")!=null){
    branch_id=(String) hashtable.get("branch_id");
    System.out.println(branch_id);
  }
  if(hashtable.get("user_id")!=null){
     user_id=(String) hashtable.get("user_id");
  }
  if(hashtable.get("jasper_name")!=null){
    jasper_name=(String)hashtable.get("jasper_name");
    System.out.println(jasper_name);
  }
  else{
    out.print("<script language='javascript'>alert('报表文件错误!');top.location='/Logout.jsp';</script>");
    return;
  }
}
%><html>
<script language="javascript" type="text/javascript">
    function subreport(types)
    {
      if(types=="1"){
        reportform.action="/servlets.jsperreport.PdfFile";
        reportform.submit();
      }
        else{
        reportform.action="/servlets.jsperreport.ExcelFile";
       reportform.submit();}
    }
</script>
<%
//获取页面控件的值
try{
%>
<link href="../css/css.css" rel="stylesheet" type="text/css">
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<script language="JavaScript" src="../js/function.js" type=""></script>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
  <tr>
    <td>
<table border="0" cellspacing="0" cellpadding="3">
        <form name="reportform" METHOD="POST" action="">
          <tr>
            <td align="center"><strong><span class="AlertColor">导出报表&gt;&gt;</span></strong></td>
            <td align="center"> <input type="image" src="../images/MoniIconPDF.gif" name="but1" onClick="subreport('1');return false;" onMouseOver="showLib(1,'导出为PDF',68)" onMouseOut="hideLib()"></td>
            <td height="52" align="center" valign="bottom">
             <input type="image" src="../images/MoniIconExcel.gif" name="but2" onClick="subreport('2');return false;"  onMouseOver="showLib(1,'导出为Excel',68)" onMouseOut="hideLib()">
             <%
             Iterator i=hashtable.keySet().iterator();
while (i.hasNext())
{
String key=(String)i.next();
String value=(String) hashtable.get(key);
%>
<input type="hidden" name="<%=key%>" value="<%=value%>">
<%
}%>
             <%if("C0000001".equals(request.getSession().getAttribute("oc_branch_id"))){%>
               <input type="hidden" name="flag" value="1">
              <%}%>
              &nbsp; </td>
          </tr>
        </form>
      </table>
    </td>
  </tr>
</table>

<%
  Connection conn = com.sysnet.dbutils.PubDataPoolBean.getInstance().
  getConn();

  Map parameters = new HashMap(hashtable);
  parameters.put("REPORT_DIR",this.getServletConfig().getServletContext().getRealPath("/jasper/"));
  if("C0000001".equals(request.getSession().getAttribute("oc_branch_id"))){
  parameters.put("flag","1");
  }

  String path = this.getServletConfig().getServletContext().getRealPath("/jasper/"+jasper_name+".jrxml");
  String newPath = path.replaceAll("jrxml", "jasper");
  File f1=new File(path);
  if (!f1.exists())
      throw new JRRuntimeException("File "+jasper_name+".jrxml not found. The report design must be compiled first.");
  File f2=new File(newPath);
  if(!f2.exists()){
    JasperCompileManager.compileReportToFile(path, newPath);
  }
  else{
    Long lngJrxmlLastModified = new Long(f1.lastModified());
    Long lngJasperLastModified = new Long(f2.lastModified());
    if ( (lngJasperLastModified != null) &&
    (lngJasperLastModified.longValue() <= lngJrxmlLastModified.longValue())) {
      JasperCompileManager.compileReportToFile(path, newPath);
    }
  }
  File reportFile = new File(newPath);
  //InputStream reportFile=this.getServletConfig().getServletContext().getResourceAsStream("/jasper/"+jasper_name+".jasper");
  if (reportFile==null)
      throw new JRRuntimeException("File "+jasper_name+".jasper not found. The report design must be compiled first.");

  //JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile);
  JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
  JasperPrint jasperPrint =JasperFillManager.fillReport(jasperReport,parameters,conn);
  JRHtmlExporter exporter = new JRHtmlExporter();

  StringBuffer sbuffer = new StringBuffer();

//  Map imagesMap = new HashMap();
  //imagesMap.put();
  String pathImage = request.getRealPath("/images");
  Map imagesMap = new HashMap();
  imagesMap.put("pathImage", pathImage);
  session.setAttribute("IMAGES_MAP", imagesMap);
  session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imagesMap);
  exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.TRUE);
//  exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER,"");
//  exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER,"");
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/net.sf.jasperreports.j2ee.servlets.ImageServlet?image=");
  exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
  exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
  exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
  exporter.exportReport();

  conn.close();
} catch (JRException jre) {
  System.out.println("JRException:" + jre.getMessage());
}catch(Exception ex){
  System.out.println("Exception:" + ex.getMessage());
}
%>
</body></html>


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shenzhen_mydream/archive/2009/01/15/3786891.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值