9

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

我想要一些关于如何调用碧玉报告的步骤。

4

6 回答 6

8
  1. 在 iReport 中编译报告
  2. 将编译好的报告放在类路径中
  3. 加载它

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

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

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

于 2010-09-19T19:09:24.233 回答
4

6 年后@Bozho现在回答(v5 和 v6)在第 5 点JRExporterParameter.OUTPUT_STREAM上包含已弃用的代码 ,但我会尝试改进其他点

  1. 加载报表

    编译版本.jasper

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

    或未编译的版本.jrxml(由于需要编译但可行,速度较慢)

    JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");
    
  2. 什么都不填报表(在报表

    中生成的数据源或只是静态文本)

    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();
    
于 2016-02-29T11:22:50.487 回答
1

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

JRPdfExporter exporter= new JRPdfExporter();

添加

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

于 2010-12-07T14:16:57.827 回答
1

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

你可以看到下面的例子

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");

  }
}
于 2012-02-21T17:53:05.583 回答
1

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

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

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

于 2010-09-19T17:28:53.803 回答
0

这是做同样事情的不同方式。

    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){
    }
于 2011-12-15T09:56:46.597 回答