Как передать имена столбцов из DefaultTableModel в отчет Jasper? - PullRequest
0 голосов
/ 07 июня 2019

Я создаю генератор 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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...