【问题标题】:How to remove empty column in JasperReport CSV file如何删除 JasperReport CSV 文件中的空列
【发布时间】:2021-06-24 13:59:54
【问题描述】:

尝试在 JasperReport 的帮助下从 pdf 生成 csv 文件。生成成功,但第一个 pdf 页面为空列。

共6栏(A / C Number Address Client Name Telephone no. Email Contact Date),但第一页7(A / C Number Address 空白 Client Name Telephone no. Email Contact日期)

我找不到这种行为的原因。

更新: 这里可能是第一页和下一页的列名存在 csv 差异的原因

多一个逗号的区别

这是模板:

 <?xml version="1.0" encoding="UTF-8"?>
 <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="clients_without_cleaners" pageWidth="842" pageHeight="595" 
orientation="Landscape"
          whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="20" 
rightMargin="20" topMargin="20"
          bottomMargin="20" uuid="285cc266-e2fa-4882-a9dd-ae24c41a7937"
          scriptletClass="rsoft.utile.JrxmlUtil">

<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<field name="id" class="java.lang.String">
    <fieldDescription><![CDATA[id]]></fieldDescription>
</field>
<field name="clientName" class="java.lang.String">
    <fieldDescription><![CDATA[clientName]]></fieldDescription>
</field>
<field name="telephone" class="java.lang.String">
    <fieldDescription><![CDATA[telephone]]></fieldDescription>
</field>
<field name="email" class="java.lang.String">
    <fieldDescription><![CDATA[email]]></fieldDescription>
</field>
<field name="contactDate" class="java.lang.String">
    <fieldDescription><![CDATA[contactDate]]></fieldDescription>
</field>
<field name="address" class="rsoft.model.api.internal.item.AddressItem">
    <fieldDescription><![CDATA[address]]></fieldDescription>
</field>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band height="69" splitType="Stretch">
        <staticText>
            <reportElement x="240" y="35" width="321" height="20" uuid="cb5fc5c6-d061-4440-a09d-a254af721eec"/>
            <textElement textAlignment="Center">
                <font size="12" isBold="true"/>
            </textElement>
            <text><![CDATA[Clients]]></text>
        </staticText>
        <staticText>
            <reportElement x="240" y="0" width="321" height="35" uuid="8497420b-8644-483c-a187-d4cca1fd7263"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Test]]></text>
        </staticText>
    </band>
</title>
<pageHeader>
    <band splitType="Stretch"/>
</pageHeader>
<columnHeader>
    <band height="40" splitType="Stretch">
        <staticText>
            <reportElement x="447" y="10" width="112" height="20" uuid="546aff27-dfe6-48b3-855c-7e35f07c0d61"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Telephone no.]]></text>
        </staticText>
        <staticText>
            <reportElement x="167" y="10" width="100" height="20" uuid="96af720b-2439-433d-a672-46ea146538a3"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Address]]></text>
        </staticText>
        <staticText>
            <reportElement x="691" y="10" width="100" height="20" uuid="43b56b3e-e87f-4ebb-a719-ba3223560cc7"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Contact Date]]></text>
        </staticText>
        <staticText>
            <reportElement x="28" y="10" width="100" height="20" uuid="1ce9f9cd-c5d2-4d0b-93c3-60157b95703a"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[A/C Number]]></text>
        </staticText>
        <staticText>
            <reportElement x="316" y="10" width="106" height="20" uuid="879f44fa-e4fe-42e7-b741-ec3baeada4df"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Client Name]]></text>
        </staticText>
        <staticText>
            <reportElement x="579" y="10" width="84" height="20" uuid="3b743c11-bd3f-4e97-8cad-fa21158eff7a"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Email]]></text>
        </staticText>
    </band>
</columnHeader>
<detail>
    <band height="51" splitType="Stretch">
        <textField>
            <reportElement x="28" y="0" width="100" height="11" uuid="c38ba780-a11f-4043-ae54-c2bb602d89a4"/>
            <textElement>
                <font size="8"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="447" y="0" width="100" height="11" uuid="d503aa89-744f-424f-a3d9-c3b769846c74"/>
            <textElement>
                <font size="8"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{telephone}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="167" y="0" width="117" height="51" uuid="635f99c3-c25a-4963-aa2a-54fac292bfe5"/>
            <textElement>
                <font size="8" isBold="false"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{REPORT_SCRIPTLET}.getAddress($F{address})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="316" y="0" width="100" height="11" uuid="c7879229-e64c-47de-a61f-346397509d3c"/>
            <textElement>
                <font size="8"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{clientName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="691" y="0" width="100" height="11" uuid="c9ae56cc-5649-4ab5-9dad-00aef9e0aba6"/>
            <textElement>
                <font size="8"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{contactDate}.isEmpty() ? "N/A" : $F{contactDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="579" y="0" width="100" height="11" uuid="500b890b-491c-473d-913d-952ac889d34d"/>
            <textElement>
                <font size="8"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
        </textField>
        <rectangle>
            <reportElement mode="Transparent" x="0" y="0" width="802" height="51"
                           uuid="0dd2be3d-b87e-4cf5-8669-243a58f6e180"/>
        </rectangle>
    </band>
</detail>
<columnFooter>
    <band splitType="Stretch"/>
</columnFooter>
<pageFooter>
    <band splitType="Stretch"/>
</pageFooter>
<summary>
    <band splitType="Stretch"/>
</summary>
<noData>
    <band height="50">
        <staticText>
            <reportElement x="28" y="13" width="204" height="20" uuid="75bdf542-21b3-401a-886d-c907d71436ab"/>
            <textElement>
                <font size="14"/>
            </textElement>
            <text><![CDATA[No details found]]></text>
        </staticText>
    </band>
</noData>

所以首先生成pdf

@Override
public JasperPrint getPDF(GetPdfReportReq getPdfReportReq) throws JRException {
    List list = null;
    String sourceFileName = null;
    GetReportReq getReportReq = new GetReportReq(getPdfReportReq);
                    sourceFileName = getClass().getClassLoader()
                            .getResource("jasper_reports/clients_without_cleaners.jrxml").getFile();
          
            list = jobDao.getClientsForReports(getReportReq, true).stream().map(item -> new ClientReportItem(item,
                    ClientsReportType.getById(Integer.parseInt(getReportReq.getReportType())))).collect(Collectors.toList());
    JRBeanCollectionDataSource beanColDataSource =
            new JRBeanCollectionDataSource(list);

    Map parameters = new HashMap();
    try {
        return JasperFillManager.fillReport(JasperCompileManager.compileReport(sourceFileName), parameters, beanColDataSource);
    } catch (JRException e) {
        e.printStackTrace();
    }
    return null;
}

然后我从 pdf 制作一个 csv 文件

   response.setContentType("application/csv");
    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");
    OutputStream outputStream = null;
    try {
        outputStream = response.getOutputStream();
        JRCsvExporter exporter = new JRCsvExporter();
        exporter.setExporterInput(new SimpleExporterInput(pdfExportService.getPDF(getPdfReportReq)));
        exporter.setExporterOutput(new SimpleWriterExporterOutput(response.getOutputStream()));
        SimpleCsvReportConfiguration configuration = new SimpleCsvReportConfiguration();
        exporter.setConfiguration(configuration);
        exporter.exportReport();

        response.flushBuffer();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeQuietly(outputStream);
    }
}

所以问题是第一页,地址后面显示一个空列 pdf示例

CSV 示例

问题在于 PDF 的第一页,但对于 PDF,它在视图中是正确的,但是当它映射为 CSV 时,它有一个空列。

我认为问题出在双逗号,但我不知道模板中的逗号是什么原因

【问题讨论】:

  • 为什么你想让一些行有非空白,, 列,而后面的行有填充列。这对 CSV 文件没有多大意义。在您输入的任何程序中,,, 都应该解析为 null。但这看起来正是我对你的 PD F 输出的期望。
  • 我不希望某些列为空,我只想删除第一个 pdf 页面总共 6 列的额外列,但第一页 7(包括一个空白)
  • 这可能是原因i.stack.imgur.com/mVKVv.png多了一个逗号
  • 好吧,抱歉我一开始没有注意到。很高兴你解决了!

标签: java jasper-reports export-to-csv


【解决方案1】:

额外的逗号(空列)是由于 pdf 文件有一个名称并且它包含在标题标签中,删除这个标题并为 csv 创建一个特殊的模板解决了我的问题。

<title>
    <band height="79" splitType="Stretch">
        <staticText>
            <reportElement x="248" y="35" width="321" height="20" uuid="a2307aa1-17a7-4118-9d91-8a7cdbfc3294"/>
            <textElement textAlignment="Center">
                <font size="12" isBold="true"/>
            </textElement>
            <text><![CDATA[Test]]></text>
        </staticText>
        <staticText>
            <reportElement x="248" y="0" width="321" height="35" uuid="549c8c0b-a978-4fec-b998-a176e2a44047"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Test]]></text>
        </staticText>
    </band>
</title>

据我在阅读 pdf 时的理解,jasper 考虑了这个标签及其尺寸,并认为有必要为第一页添加一个空列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 2014-04-17
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多