【发布时间】: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