2

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

4

0 回答 0