我有一份报告要使用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);
答案 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)
);