jasperreport导出CSV性能

时间:2012-10-04 20:39:41

标签: java csv jasper-reports

我正在使用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

0 个答案:

没有答案