是的,您可以使用JasperReports实现您的设计。
解决任务的步骤。
第一步。我们应该计算行中的字符数和页面上的行数。为此
,我们可以使用一对net.sf.jasperreports.export.text.page.width和net.sf.jasperreports.export.text.page.height报告的属性。您还可以使用net.sf.jasperreports.export.text.character.width和net.sf.jasperreports.export.text.character.height对报告的属性,而不是第一个。
第二步。我们知道页面格式大小(例如以像素为单位。对于没有边距的 A4,它是:555x802)并且我们设置了行中的字符数和页面中的行数。我们可以计算和设置staticText和textField元素位置的精确值( x,y坐标和元素的宽度和高度属性),
样本
样本数据源
我使用了csv数据源(points.csv文件):
USER_NAME,LAST_ACCESSED,IS_ACTIVE,POINTS
John Doe,10/26/2013,Y,87.9
Sarah Connor,10/23/2013,Y,80.5
Viktor Navorski,10/14/2013,Y,95.5
Forrest Gump,10/25/2013,Y,97.0
Raymond Babbitt,10/24/2013,Y,88.5
Thomas Crown,10/24/2013,Y,88.0
Danny Ocean,09/30/2013,Y,90.5
报告设计
我已删除边距并设置A4报告的格式(555x802 像素)。
jrxml 文件
<?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="text_output" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="9a0b1db2-1ed0-44e1-960b-4626cea0097d">
<property name="net.sf.jasperreports.export.text.page.width" value="80"/>
<property name="net.sf.jasperreports.export.text.page.height" value="40"/>
<field name="USER_NAME" class="java.lang.String"/>
<field name="LAST_ACCESSED" class="java.lang.String"/>
<field name="IS_ACTIVE" class="java.lang.String"/>
<field name="POINTS" class="java.lang.String"/>
<columnHeader>
<band height="43" splitType="Stretch">
<staticText>
<reportElement uuid="d065f8ed-0c05-47d0-a679-a392c9cfabe5" x="0" y="0" width="152" height="20"/>
<textElement/>
<text><![CDATA[USER_NAME]]></text>
</staticText>
<staticText>
<reportElement uuid="573550a9-5fc9-41ee-ae4f-7b550868c75d" x="152" y="0" width="143" height="20"/>
<textElement/>
<text><![CDATA[LAST_ACCESSED]]></text>
</staticText>
<staticText>
<reportElement uuid="4b1f5b5c-4c61-4159-9357-041fd8e3e775" x="295" y="0" width="138" height="20"/>
<textElement/>
<text><![CDATA[IS_ACTIVE]]></text>
</staticText>
<staticText>
<reportElement uuid="1c851f50-9ace-4e30-be1e-7d5454127db8" x="433" y="0" width="103" height="20"/>
<textElement/>
<text><![CDATA[POINTS]]></text>
</staticText>
<staticText>
<reportElement uuid="7e358a83-b348-40ca-b6f4-009d6bed4b24" x="0" y="20" width="100" height="23"/>
<textElement/>
<text><![CDATA[----------------------]]></text>
</staticText>
<staticText>
<reportElement uuid="523a7abd-0fbd-4b63-b8d5-2ed78ee795cc" x="295" y="20" width="100" height="23"/>
<textElement/>
<text><![CDATA[---------]]></text>
</staticText>
<staticText>
<reportElement uuid="7ebe2ec7-9450-4fdf-b99a-48af5fe3ce49" x="152" y="20" width="100" height="23"/>
<textElement/>
<text><![CDATA[-------------]]></text>
</staticText>
<staticText>
<reportElement uuid="155d3972-9d99-4d3b-bb41-05f08dcdd5fa" x="433" y="20" width="100" height="23"/>
<textElement/>
<text><![CDATA[--------]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement uuid="652256e2-0f1e-4848-b1d0-d064caaa5020" x="0" y="0" width="152" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{USER_NAME}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="380af714-4dbd-4e0f-ae23-bfada0449a2f" x="152" y="0" width="143" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{LAST_ACCESSED}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="752c0f18-2dea-4209-bd0d-d787d8c462a8" x="295" y="0" width="63" height="20"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{IS_ACTIVE}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="40807ad0-58a4-42b7-9636-04f01c0c3bf5" x="433" y="0" width="54" height="20"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{POINTS}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
结果 - 通过 JRTextExporter 生成的 txt 文件
我使用iReport来生成输出文件。这个txt文件的内容是:
使用 Java 代码
如果使用Java代码,我们应该为JRTextExporter设置此参数:JRTextExporterParameter.PAGE_WIDTH和JRTextExporterParameter.PAGE_HEIGHT
示例代码:
public static void generateReport() throws JRException {
JRCsvDataSource dataSource = new JRCsvDataSource(JRLoader.getLocationInputStream(csvFileName));
dataSource.setRecordDelimiter("\r\n");
dataSource.setUseFirstRowAsHeader(true);
dataSource.setColumnNames(new String[]{ "USER_NAME", "LAST_ACCESSED", "IS_ACTIVE", "POINTS"});
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
JRTextExporter exporter = new JRTextExporter();
exporter.setParameter(JRTextExporterParameter.PAGE_WIDTH, 80);
exporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT, 40);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFileName);
exporter.exportReport();
}
在这个示例中,我使用了与数据源相同的csv文件。
我们如何计算x坐标
在您的示例中,您希望以 23 个符号开始第二列。好的,让我们看看我的样本。我们有什么:
在这种情况下,一个字符的宽度是555/80=6,9375。
我们在第二列的第一个符号之前有 22 个符号。它是22*6,9375=152,625像素。在我的示例中,我为第二列标题的x属性设置了152 。在我的示例中,第二列标题中的第一个符号的位置为23。
对于第三列,计算值为43*6,9375=298,3125 ,我的样本中的实际x为295(第三列星号为44 个符号)。
如您所见,计算太准确了。
笔记:
您可以在此处找到有关导出到文本文件的信息:文本导出示例