Я создаю генератор PDF, который должен вводить имена столбцов из colNames
, переданного в TableModel model
.Данные поступают нормально, но заголовки просто читаются как COLUMN_1 и COLUMN_2.
Я пытался найти проблему, но есть очень мало информации о взаимодействии между отчетами java и jasper.
Если я изменю <text><![CDATA[COLUMN_1]]></text>
на <text><![CDATA[FOO]]></text>
, тогда имя столбца будет FOO, что говорит о том, что jrxml рассматривает это как обычный текст, а не поле.Если я изменю его на <![CDATA[$F{COLUMN_4}]]>
, тогда заголовок столбца будет просто $ F.
Java
private Vector<String> getMockColumnNames() {
Vector<String> colNames = new Vector<>();
colNames.add("Name");
colNames.add("Age");
return colNames;
}
private Vector<Vector<String>> getMockData(){
Vector<Vector<String>> rows = new Vector<>();
rows.add(new Vector<>(Arrays.asList("Chris", "33")));
rows.add(new Vector<>(Arrays.asList("Steve", "44")));
return rows;
}
public byte[] generate(CompositeView data) throws IOException {
try {
final JasperReport report = reportsFileStore.getJasperReport(foo.xml);
Vector<Vector<String>> allData = getMockData();
Vector<String> colNames = getMockColumnNames();
TableModel model = new DefaultTableModel(allData, colNames);
JRTableModelDataSource dataSource = new JRTableModelDataSource(model);
// Create an empty datasource.
JasperPrint jasperPrint = JasperFillManager.fillReport(report, new HashMap<>(), dataSource);
byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
return bytes;
}
foo.JRXML
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 5.0.1 -->
<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="Blank_A4_2" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ca6b24de-ed82-4dcf-84c4-84dd89553a90">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="CN LC"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="COLUMN_0" class="java.lang.String"/>
<field name="COLUMN_1" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="30" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="200" height="30" uuid="7bcc962f-26d0-4ff2-889d-c477f2748419"/>
<textFieldExpression><![CDATA["Table Model Report..."]]></textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height="18">
<staticText>
<reportElement positionType="Float" mode="Transparent" x="0" y="0" width="81" height="18" isRemoveLineWhenBlank="true" backcolor="#FFFFFF" uuid="620dad59-995a-46a2-95a3-92eddda468ad"/>
<textElement>
<font fontName="Arial" isBold="true" size="14"/>
<paragraph lineSpacing="Single"/>
</textElement>
<text><![CDATA[$F{COLUMN_0}]]></text>
</staticText>
<staticText>
<reportElement positionType="Float" mode="Transparent" x="81" y="0" width="81" height="18" isRemoveLineWhenBlank="true" backcolor="#FFFFFF" uuid="1de494cd-8da7-435d-8d70-81664ebf15c9"/>
<textElement>
<font fontName="Arial" isBold="true" size="14"/>
<paragraph lineSpacing="Single"/>
</textElement>
<text><![CDATA[$F{COLUMN_1}]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="12" splitType="Stretch">
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" mode="Transparent" x="0" y="0" width="81" height="12" isRemoveLineWhenBlank="true" backcolor="#FFFFFF" uuid="7b7e0871-657c-4956-8227-08b0e4cf6de8"/>
<textElement>
<font fontName="Arial"/>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$F{COLUMN_0}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" mode="Transparent" x="81" y="0" width="81" height="12" isRemoveLineWhenBlank="true" backcolor="#FFFFFF" uuid="7d7aa39e-5564-462e-afdd-e629cc557aa0"/>
<textElement>
<font fontName="Arial"/>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[$F{COLUMN_1}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>