JasperReport,展示和打印报告

blo*_*low 3 java printing jasper-reports

我导出了一个用iReport创建的.jrprint文件.现在我想预览报告并最终打印出来,我该怎么做?

我正在尝试:

JRBeanCollectionDataSource ds=new JRBeanCollectionDataSource(list);
JasperPrint jrprint=JasperFillManager.fillReport("report.jrprint", null, ds);
Run Code Online (Sandbox Code Playgroud)

但我有这个例外

java.lang.ClassCastException: net.sf.jasperreports.engine.JasperPrint cannot be cast to net.sf.jasperreports.engine.JasperReport
Run Code Online (Sandbox Code Playgroud)

Kie*_*eli 6

您正在指定JasperPrint文件而不是JasperReport文件.让我分解文件及其内容:

  • report.jrxml - jasper报告的xml定义 - 这定义了一个报告,但不能直接用于生成输出.
  • report.jasper - 已编译的jrxml文件(JasperReport).这可以用作输入以使用数据填充报告.
  • report.jprint - 已填充数据的报告,可以导出为多种输出格式

下面是一些代码,它们从设计器创建的jrxml文件开始,以获取打印的pdf输出:

Connection connection = PersistenceSessionFactory.getSqlSession().getConnection();
JasperReport report = JasperCompileManager.compileReport( "FancyPantsReport.jrxml" );

// setup parameters for use with the report
HashMap<String, Object> params = new HashMap<String,Object>();
params.put( "sqlDate", fromDate );

// Fill the report data from the sql connection and parameters
JasperPrint printedReport = JasperFillManager.fillReport(report, params, connection);

String outputFilename = "FancyPants-" + dateString + ".pdf";
JasperExportManager.exportReportToPdfFile( printedReport, outputFilename );

LOG.info("Report Generated in " + (System.currentTimeMillis() - start) + "ms");
Run Code Online (Sandbox Code Playgroud)

注意它使用compile从jrxml获取JasperReport,然后使用FillManager从JasperReport获取JasperPrint,最后将JasperPrint导出为pdf.