贾斯珀报告缺少第一排 [英] Jasper report missing first row

查看:91
本文介绍了贾斯珀报告缺少第一排的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 JasperReports 生成报告,并假设将其导出为多种格式。但目前我只使用excel报告。

I'm generating a report using JasperReports and suppose to export it into several formats. But currently im only working with excel reports.

这是我的控制器代码。

    InputStream in = reportTemplate.getTemplate(reportInquery.getTemplateFile());
    JasperPrint print = JasperFillManager.fillReport(in, null,
                new JRResultSetDataSource(reportDao.getReportData(reportInquery)));
    resp = HttpConfig.setHeaders(reportInquery, resp);
    Exporter exporter = reportOption.getRenderOptions(reportInquery.getFormat(), resp.getOutputStream(), print);
    exporter.exportReport();

在我的配置工厂中,在调用 getRenderOptions <之后,excel报告配置如下/ code>方法。

In my configuration factory, excel report configures as follows, after calling getRenderOptions method.

    public Exporter exporterOptions(OutputStream outputStream, JasperPrint print) {
    JRXlsExporter exporter = new JRXlsExporter();
    exporter.setExporterInput(new SimpleExporterInput(print));
    OutputStreamExporterOutput outputStreamExporterOutput = new SimpleOutputStreamExporterOutput(outputStream);
    exporter.setExporterOutput(outputStreamExporterOutput);
    SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
    configuration.setOnePagePerSheet(true);
    configuration.setDetectCellType(true);
    configuration.setMaxRowsPerSheet(100);
    configuration.setRemoveEmptySpaceBetweenColumns(true);
    configuration.setRemoveEmptySpaceBetweenRows(true);
    exporter.setConfiguration(configuration);
    return exporter;
}

创建 JRResultSetDataSource 我在上面的 getReportData 方法中使用了oracle OracleCachedRowSet

To create JRResultSetDataSource I have used oracle OracleCachedRowSet in above getReportData method.

public RowSet getReportData(ReportInqueryDTO reportInquery) {
    try {
        String query = getQueryById(reportInquery.getTemplateId());
        Map<String, String> params = new HashMap<>();
        params.put("fromDate", reportInquery.getFromDate());
        params.put("toDate", reportInquery.getToDate());
        params.put("appName", this.applicationName);

        RowSet rowSet = namedParameterJdbcTemplate.query(query, params, new ResultSetExtractor<RowSet>() {
            @Override
            public RowSet extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                OracleCachedRowSet rs = new OracleCachedRowSet();
                rs.populate(resultSet);
                return rs;
            }
        });


        rowSet.beforeFirst();
        return rowSet;
    } catch (Exception exception) {
        log.error("getReportData failed.");
    }
    return null;
}

我的问题是,excel总是带有第一条记录丢失,其中光标指向 resultSet 。 (例如:这里 rowSet.beforeFirst()表示在第一个索引之前。我错过了这个场景中的第一条记录。)

My problem is, excel always comes with first record missing from, where the cursor of the resultSet is pointed. (Ex: Here rowSet.beforeFirst() means before 1st index. I'm missing the first record in this scenario.)

我几天都遇到这个问题。我想知道这是否是一个碧玉问题我该怎么解决它。如果无法解决,我想知道如何在第一条记录之前动态添加缓存行集?

I'm stuck with this issue couple of days. I want to know if this is a jasper issue how can I resolve it. If it can not be resolved, I want to know how to add a cached rowset dynamically before the first record?

我有几个jrxml文件,其中一个是添加如下。每个文件都采用相同的格式。

I have couple of jrxml files and, one of it is added below.Every file follows the same format.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.0.0.final using JasperReports Library     version 6.0.0  -->
<!-- 2014-12-30T15:20:10 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TTT_Call_Transfers_Report" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b61676f8-0366-4125-996c-7564d0f77eb4">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="NewDataAdapter"/>
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
    <box>
        <pen lineWidth="0.5" lineColor="#000000"/>
        <topPen lineWidth="0.5" lineColor="#000000"/>
        <leftPen lineWidth="0.5" lineColor="#000000"/>
        <bottomPen lineWidth="0.5" lineColor="#000000"/>
        <rightPen lineWidth="0.5" lineColor="#000000"/>
    </box>
</style>
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
    <box>
        <pen lineWidth="0.5" lineColor="#000000"/>
        <topPen lineWidth="0.5" lineColor="#000000"/>
        <leftPen lineWidth="0.5" lineColor="#000000"/>
        <bottomPen lineWidth="0.5" lineColor="#000000"/>
        <rightPen lineWidth="0.5" lineColor="#000000"/>
    </box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
    <box>
        <pen lineWidth="0.5" lineColor="#000000"/>
        <topPen lineWidth="0.5" lineColor="#000000"/>
        <leftPen lineWidth="0.5" lineColor="#000000"/>
        <bottomPen lineWidth="0.5" lineColor="#000000"/>
        <rightPen lineWidth="0.5" lineColor="#000000"/>
    </box>
</style>
<subDataset name="Dataset1" uuid="54db10cf-a696-4f7d-b642-96871feb617d">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="NewDataAdapter"/>
    <queryString language="SQL">
        <![CDATA[]]>
    </queryString>
    <field name="DATE_OF_TRANSFER" class="java.sql.Timestamp"/>
    <field name="AGENT_ID" class="java.lang.String"/>
    <field name="AGENT_NAME" class="java.lang.String"/>
    <field name="CTALK_CONTACT_ID" class="java.lang.String"/>
    <field name="ASSOCIATED_QUEUE_ID" class="java.lang.String"/>
</subDataset>
<queryString language="SQL">
    <![CDATA[]]>
</queryString>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band height="63" splitType="Stretch">
        <staticText>
            <reportElement x="160" y="16" width="222" height="30" uuid="d89e2553-d3fb-4360-b797-4f69b60938a5"/>
            <text><![CDATA[TTT Call Transfers Report]]></text>
        </staticText>
    </band>
</title>
<detail>
    <band height="253" splitType="Stretch">
        <componentElement>
            <reportElement x="0" y="0" width="555" height="253" uuid="c229d6c3-18b7-4de2-a669-01e11d25c642"/>
            <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="Dataset1" uuid="e0262612-dc81-4d84-abf8-9b52609ba792">
                    <datasetParameter name="REPORT_DATA_SOURCE">
                        <datasetParameterExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></datasetParameterExpression>
                    </datasetParameter>
                </datasetRun>
                <jr:column width="40" uuid="a91061c3-7760-43d2-bdc1-091f0e712aaa">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="6afcdf24-958c-49f4-9ef3-b757ffd1e8de"/>
                            <text><![CDATA[DATE_OF_TRANSFER]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:columnFooter style="Table_CH" height="30"/>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="40" height="30" uuid="84a5e4b7-30e0-409c-b2ab-e13c1dd02950"/>
                            <textFieldExpression><![CDATA[$F{DATE_OF_TRANSFER}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="c7b5a8eb-04b6-4cd6-9328-e1e8ce11a2fc">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="d7cc290a-6918-4d47-8f55-b43761bee59b"/>
                            <text><![CDATA[AGENT_ID]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:columnFooter style="Table_CH" height="30"/>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="40" height="30" uuid="b5f2b8bf-9132-4447-9209-f1fcb3b873c4"/>
                            <textFieldExpression><![CDATA[$F{AGENT_ID}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="d2427379-2c72-4e33-9b46-ade8727dbed5">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="bdcb01c5-5073-4a10-b498-e2d1a2cf7c78"/>
                            <text><![CDATA[AGENT_NAME]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:columnFooter style="Table_CH" height="30"/>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="40" height="30" uuid="e259ef09-f446-491c-88dd-f7694197e060"/>
                            <textFieldExpression><![CDATA[$F{AGENT_NAME}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="81fe9b33-57aa-48b2-914b-e3e9b45cf6a1">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="ef5e379b-65de-4ea0-a5cb-13368efa16f0"/>
                            <text><![CDATA[CTALK_CONTACT_ID]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:columnFooter style="Table_CH" height="30"/>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="40" height="30" uuid="5f49f1a9-379a-4d02-9e55-fc6a865aa828"/>
                            <textFieldExpression><![CDATA[$F{CTALK_CONTACT_ID}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="40" uuid="f6e8b2a6-925b-41b5-9043-1ffa215871f1">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="40" height="30" uuid="b55c7599-a237-43f1-aff5-464717e3c917"/>
                            <text><![CDATA[ASSOCIATED_QUEUE_ID]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:columnFooter style="Table_CH" height="30"/>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="40" height="30" uuid="0d2d53d0-1cb2-4d64-a09d-b0eeacca694d"/>
                            <textFieldExpression><![CDATA[$F{ASSOCIATED_QUEUE_ID}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
    </band>
</detail>

提前致谢。

推荐答案

正如劳拉在此提到的那样回答数据源中的记录指针由接收它的每个元素递增。由于我传递了结果集,我认为将结果集再次作为参数传递没有意义。最后我决定在结果集的开头添加一个空记录。

As Laura mentioned in this answer the record pointer in the data source is incremented by every element that receives it. Since I'm passing the result set, I thought no point in passing result set again as a parameter. Finally I decided to add an empty record at the beginning of the result set.

在上面的问题中的 getReportData 方法,你可以按照下面的方法来做。

In getReportData method in above question, you can do it by, following below method.

    RowSet rowSet = namedParameterJdbcTemplate.query(query, params, new ResultSetExtractor<RowSet>() {
            @Override
            public RowSet extractData(ResultSet resultSet) throws SQLException, DataAccessException {

                OracleCachedRowSet rs = new OracleCachedRowSet();
                rs.populate(resultSet);

                // Have to add a empty row, because jasper is not displaying
                // the first row of report.
                rs.setReadOnly(false);
                rs.beforeFirst();
                rs.moveToInsertRow();

                int numCol = rs.getMetaData().getColumnCount();
                for (int i = 1; i < numCol + 1; i++) {
                    // Add null inserted row to each column
                    rs.updateNull(i);
                }

                rs.insertRow();
                rs.beforeFirst();
                return rs;
            }
        });

这篇关于贾斯珀报告缺少第一排的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆