我正在使用 japserreport 将数据从查询导出到 CSV(;
分隔)。该报告是动态创建的,因为我事先不知道我将要执行的查询。
我从一个“空”jrxml 文件开始reportFileName
(没有任何部分的空文件,只有数据源)。
final JasperDesign jasperDesign = JRXmlLoader.load(reportFileName);
JRDesignField
我根据我拥有的字段动态添加:
final JRDesignField field = new JRDesignField();
field.setName(value);
field.setValueClass(java.lang.String.class);
jasperDesign.addField(field);
我有一个标题和详细信息乐队:
final JRDesignBand titleBand = new JRDesignBand();
titleBand.setHeight(20);
final JRDesignBand detailBand = new JRDesignBand();
detailBand.setHeight(20);
我添加静态文本:
final JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setText(label);
staticText.setX(x);
staticText.setWidth(100);
staticText.setHeight(20);
titleBand.addElement(staticText);
和领域:
final JRDesignTextField textField = new JRDesignTextField();
textField.setX(x);
textField.setWidth(100);
textField.setHeight(20);
final JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$F{" + value + "}");
textField.setExpression(expression);
detailBand.addElement(textField);
然后我将报告导出为 CSV 格式:
final JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JRAbstractExporter exporter = new JRCsvExporter();
exporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, ";");
exporter.setParameter(JRExporterParameter.PROGRESS_MONITOR, progressMonitor);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();
现在导出工作正常,我可以看到我生成的CSV
文件具有正确的列和值。
我的问题是:
- 当我在模式下运行 jasperreport 时
TRACE
,我可以看到它会计算一大堆文本的宽度和高度,这对于所有类型的导出都可以,但对于 CVS 文件(平面文件)则没有必要。我怎样才能告诉 jasper 不要进行所有这些计算?(我使用 aJRSwapFileVirtualizer
并且交换文件现在超过 1GB 并且计数为 300k 记录)
我正在使用 jasperreport 4.5.1