【问题标题】:JasperReports: How to call the report in jsp pageJasperReports:如何在jsp页面中调用报表
【发布时间】:2011-04-14 09:11:58
【问题描述】:

我使用iReport 3.7.4 version 制作了一份 jasper 报告,现在我必须在我使用 servlet、jsp 和 struts 框架、apache tomcat 作为服务器的 Java 应用程序中使用或调用该报告。

我想通过一些示例了解如何调用 jasper 报告的步骤。

【问题讨论】:

    标签: java jsp jasper-reports struts-1


    【解决方案1】:
    1. 在 iReport 中编译报告
    2. 将编译后的报告放在类路径中
    3. 加载它

      JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
      
    4. 用数据填充它。 dataSource 是您拥有的 DataSource 实例 - 例如 BeanCollectionDataSource

      JasperPrint jasperPrint = 
           JasperFillManager.fillReport(jasperReport, params, dataSource);
      
    5. 导出

      JRPdfExporter exporter = new JRPdfExporter();
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
      exporter.exportReport();
      
    6. 上面的outputStream 可能是response.getOutputStream()FileOutputStream(),这取决于您是将其发送给客户端还是将其存储为文件。如果要将其发送给客户端,则必须发送 Content-Disposition 标头等,但这取决于您要保存的格式。如果您想在客户端打印,这是一个完全不同的问题——您需要一些客户端代码,例如一个小程序。

    【讨论】:

    【解决方案2】:

    6 年后@Bozho answer 现在(v5 和 v6)在第 5 点包含 已弃用代码 JRExporterParameter.OUTPUT_STREAM,不过我会尽量改进其他点

    1. 加载报告

      编译版本.jasper

      JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
      

      未编译版本.jrxml(速度较慢,因为需要编译但可行)

      JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");
      
    2. 填写报告

      nothing(数据源在报告中生成或只是静态文本)

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
      

      使用数据源

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
      

      与数据库连接(可能是最常见的,在报告中执行的sql)

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection);
      
    3. 导出报告

      JRPdfExporter exporter = new JRPdfExporter()
      exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
      exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
      SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
      configuration.setMetadataAuthor("Petter"); //Set your pdf configurations, 
      exporter.setConfiguration(configuration);
      exporter.exportReport();
      
    4. 如果您希望将报告流式传输直接到网页,这是contentTypeContent-disposition 的设置方式以及您检索outputStream 的方式

      response.setContentType("application/x-pdf");
      response.setHeader("Content-disposition", "inline; filename=myReport.pdf");
      OutputStream outputStream = response.getOutputStream();
      

    【讨论】:

      【解决方案3】:

      这段代码应该会给你一些关于如何做的想法

      JasperReport jr=JasperCompileManager.compileReport("yourJRXMLFilePath");
      JasperPrint jrPrint = JasperFillManager.fillReport(jr,mapWithParameters,aJRDataSource);
      JasperExportManager.chooseYourFavoriteMethod(jrPrint,"destinationFile");
      

      否则,请检查api 如果你已经用 iReport 编译过文件,第一行可以省略。在这种情况下,请检查 JasperFillManager 上的正确方法的 api。

      【讨论】:

        【解决方案4】:

        在第一个答案中,第 5 点: 之后

        JRPdfExporter exporter= new JRPdfExporter();

        添加

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

        【讨论】:

          【解决方案5】:

          最佳解决方案(也为了更好的性能)将调用编译报告。

          你可以看下面的例子

          import java.io.IOException;
          import java.util.HashMap;
          
          import net.sf.jasperreports.engine.JREmptyDataSource;
          import net.sf.jasperreports.engine.JRException;
          import net.sf.jasperreports.engine.JasperExportManager;
          import net.sf.jasperreports.engine.JasperFillManager;
          import net.sf.jasperreports.engine.JasperPrint;
          
          public class PdfFromJasperFile {
            public static void main(String[] args) throws JRException, IOException {
          
              JasperPrint jasperPrint = JasperFillManager.fillReport("report.jasper",  new HashMap<String, Object>(), 
              new JREmptyDataSource());
              JasperExportManager.exportReportToPdfFile(jasperPrint, "sample.pdf");
          
            }
          }
          

          【讨论】:

            【解决方案6】:

            这是一种不同的做法。

                JasperReport jasperReport;
                JasperPrint jasperPrint;
                Map<String, Object> param = new HashMap<String, Object>();
                try{
                    String sourceFileName = ".jrxml";
                    jasperReport = JasperCompileManager.compileReport(sourceFileName);
                    jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails()));
                    JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf");
                }
                catch(Exception e){
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-05
              • 2011-05-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多