我正在使用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
文件,其中包含正确的列和值。
我的问题是:
TRACE
模式下运行jasperreport时,我可以看到它计算了一大堆文本宽度和高度,这对于所有类型的导出都是可以的,但对于CVS文件(平面文件)则没有必要。我如何告诉碧玉不要进行所有这些计算? (我使用JRSwapFileVirtualizer
并且交换文件现在超过1GB并且计数为300k记录)我正在使用jasperreport 4.5.1