0

我正在使用 iReport 制作 JRXML 文件。为了使用 Java Struts 导出这些数据,我使用了以下代码。

public ActionForward reportExport(ActionMapping mapping, ActionForm form,
   HttpServletRequest req, HttpServletResponse res) throws Exception {
  String reportType2=req.getParameter("reporttype");
  System.out.println("reportType2"+reportType2);
  String filename = "slademofinalreport1.jrxml";
  /*String reporttype = "pdf";*/
  String reporttype = reportType2;
  System.out.println(filename);
  System.out.println(reporttype);

  Class.forName("com.mysql.jdbc.Driver");
  Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/epim","", "");
  String query="select projectname,processname,queuename,sladuedate,d.createddate,d.lastupdatedate,count(d.documentid)as numofdocuments,datediff(d.createddate,d.lastupdatedate)/count(d.documentid) as averagesla,datediff(d.sladuedate,d.createddate) as sladefined from epim.mstqueue mq,epim.userproject u,epim.documentqueuedetails d,epim.mstproject mproj,epim.mstprocess mproc where d.projectid=u.projectid and u.userid=13 and mproj.projectid=d.projectid and mproc.processid=d.processid and mq.queueid=d.queueid group by queuename ";

  PreparedStatement stmt1=con.prepareStatement(query);
  //stmt1.setInt(1,200);
  java.sql.ResultSet rs3=stmt1.executeQuery();
  /*Statement stmt1=(Statement) con.createStatement();
  java.sql.ResultSet rs3= stmt1.executeQuery("select projectname,processname,queuename,sladuedate,d.createddate,d.lastupdatedate,count(d.documentid)as numofdocuments,datediff(d.createddate,d.lastupdatedate)/count(d.documentid) as averagesla,datediff(d.sladuedate,d.createddate) as sladefined from epim.mstqueue mq,epim.userproject u,epim.documentqueuedetails d,epim.mstproject mproj,epim.mstprocess mproc where d.projectid=u.projectid and u.userid=13 and mproj.projectid=d.projectid and mproc.processid=d.processid and mq.queueid=d.queueid group by queuename");*/
  JRResultSetDataSource obj=new JRResultSetDataSource(rs3);

//  String path = application.getRealPath("/");
  JasperReport jasperReport = JasperCompileManager.compileReport("D:/subash/kmsnewwork/KMS_SUBASH/WebContent/jasperreport/"+ filename);
  System.out.println("Report Compiled...");
  JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null,obj);
  System.out.println("Report Created...");
  ServletOutputStream ouputStream = res.getOutputStream();
  JRExporter exporter = null;

  if( "pdf".equalsIgnoreCase(reporttype) )
  {
  res.setContentType("application/pdf");
  res.setHeader("Content-Disposition", "inline; filename=\"file.pdf\"");

  exporter = new JRPdfExporter();
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
  }
  else if( "rtf".equalsIgnoreCase(reporttype) )
  {
  res.setContentType("application/rtf");
  res.setHeader("Content-Disposition", "inline; filename=\"file.rtf\"");

  exporter = new JRRtfExporter();
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
  }
  else if( "html".equalsIgnoreCase(reporttype) )
  {
  exporter = new JRHtmlExporter();
  exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM,false);
  exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, new Boolean(false)); 

  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
  }
  else if( "xls".equalsIgnoreCase(reporttype) )
  {
  res.setContentType("application/xls");
  res.setHeader("Content-Disposition", "attachment; filename=\"file.xls\"");

  exporter = new JRXlsExporter();
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
  }
  else if( "csv".equalsIgnoreCase(reporttype) )
  {
  res.setContentType("application/csv");
  res.setHeader("Content-Disposition", "inline; filename=\"file.csv\"");

  exporter = new JRCsvExporter();
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
  }

  try
  {
  exporter.exportReport();
  }
  catch (JRException e)
  {
  throw new ServletException(e);
  }
  finally
  {
  if (ouputStream != null)
  {
  try
  {
  ouputStream.close();
  }
  catch (IOException ex)
  {
   System.out.println("exception thrown");
  }
  }
  }
  /*return mapping.findForward("goLoginPage");*/
  return mapping.findForward("goReportFilterPage");
 }

除 HTML 外,所有的导出格式都是获取图表。谁能帮我?由于图表没有使用 HTML 格式显示,我应该为 HTML 做任何额外的事情吗?

4

1 回答 1

1

与其他文件格式不同,图像不会嵌入到 html 文件中,因此需要特别小心。

请参阅JRHtmlExporterParameter

“一个重要的问题是图像。HTML 格式将图像存储为单独的文件,因此导出器需要知道这些图像将存储在哪里。如果它们存储在磁盘上,则 IMAGES_URI 参数将使用包含文件名的字符串初始化磁盘。如果它们保留在内存中,IMAGES_URI 必须指向能够将图像发送到浏览器的资源(例如图像 servlet,如 webapp 示例所示)。"

于 2010-10-16T06:41:40.577 回答