当有更多数据时,Jasper报告以PDF格式导出空数据

时间:2009-10-29 06:13:54

标签: java jasper-reports

我有一份报告要使用jasper报告以excel,pdf和word格式导出。我使用xml文件作为报告的DataSource,但是当数据增加时,jasper报告仅为PDF格式导出空文件,当我减少数据内容时,它会正确导出可用数据。 pdf大小有限制吗? ,我们如何从java中管理jasper报告的大小?

我的jrxml真的很大,所以我不能在这里添加它,我添加了我用来导出内容的java代码:

JRAbstractExporter exporter = null;
if (format.equals("pdf")) {
    exporter = new JRPdfExporter();
    jasperPrint.setPageWidth(Integer.parseInt(pWidth));
} else if (format.equals("xls")) {
    exporter = new JRXlsExporter();

} else if (format.equals("doc")) {
    jasperPrint.setPageWidth(Integer.parseInt(pWidth));
}
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
        jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
        outputStream_);
exporter.exportReport();
contents = outputStream_.toByteArray();
response.setContentType("application/" + format);
response.addHeader("Content-disposition",
        "attachment;filename=" + name.toString() + "." + format);

5 个答案:

答案 0 :(得分:10)

如果没有日期来源,您可以尝试使用此代码

       jasperReport = JasperCompileManager.compileReport(sourceFileName);
       jasperPrint = JasperFillManager.fillReport(jasperReport,jasperParameter,new JREmptyDataSource()); 
       JasperExportManager.exportReportToPdfFile(jasperPrint, "D://.pdf")

即使您没有任何数据源,并且提供JREmptyDataSource的静态数据报告也很重要,否则您可能会收到空白报告。

点击此链接了解详情https://stackoverflow.com/a/5334415/649451

- 干杯!

答案 1 :(得分:2)

尝试设置内容长度:

response.setContentLength(outputStream_.toByteArray().length)

看看这是否可以解决您的问题。

答案 2 :(得分:2)

也许你没有在报告中定义数据。

在生成报告时尝试使用此代码,以避免在没有数据时隐藏部分:

JasperReport jasperReport = (JasperReport)JRLoader.loadObject ("report1.jasper");
**jasperReport.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);**

欢呼!

答案 3 :(得分:1)

我有类似的问题。对于大量记录,pdf得到空白报告。

这是通过将JRParameter.IS_IGNORE_PAGINATION设置为false来解决的。

答案 4 :(得分:0)

在处理大数据和jasper报告时对我有用的方法是首先将所需数据插入到数据库表中,然后在jasper报告上创建一个SQL语句,该语句将使用您创建的数据连接到您创建的表中需要。这样可以在数据库上进行更多的工作,而在jasper库上则更少。以下是可以创建用于存储报告数据的表的示例。

CREATE TABLE RE_EMPLOYEE(
EMPLOYEE_ID INT UNIQUE NOT NULL
COMPANY_ID INT UNIQUE NOT NULL
REPORT_NAME VARCHAR(20)
UNIQUE_USER_ID INT UNIQUE NOT NULL
PRIMARY KEY (EMPLOYEE_ID, COMPANY_ID)
);