Как распечатать по горизонтали список в подотчете в отчете Jasper - PullRequest
0 голосов
/ 28 января 2019

У меня есть две модели Customer и Order следующим образом:

class Customer{
    private String customerName;
    private List<Order> orders; 
}

class Order{
     private String orderName;
}

Я создаю PDF-файл, в котором перечислены все имена клиентов по вертикали и соответствующие им заказы по горизонтали, как показано ниже:

customer1                order1                     order2

customer2                order3                     order4
.
.
.

, где order1 и order2 относятся к customer1, а order3 и order4 относятся к customer2.

То, что я сделал для каждого объекта клиента, я напечатаю имя клиента и передам список заказов в другой подотчет, а внутри этого подотчета я распечатаю все элементы в этом списке заказов, но по горизонтали, а не по вертикали.,

Вот мой код jrxml:

Мой основной отчет:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<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="epicsReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="98e422a6-47f1-4bf1-9436-b6cbfdc8c904">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="ordersSubReport" class="net.sf.jasperreports.engine.JasperReport"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="customerName" class="java.lang.String"/>
    <field name="orders" class="java.util.List"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="25" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="270" height="25" uuid="26bf39b4-9072-4edc-a846-3141bff7da16">
                    <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="8d2c2571-e603-4eba-8048-3053e3282a99"/>
                </reportElement>
                <textFieldExpression><![CDATA[$F{customerName}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement x="312" y="0" width="200" height="25" uuid="b2675578-87cc-4a7b-8b5a-2c8af0fbde73"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{orders})]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{ordersSubReport}]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

Мойвложенный отчет:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
<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="skillsDataReport" columnCount="10" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="55" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c6d95fd0-d8af-4727-999c-9804a17721e4">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <property name="com.jaspersoft.studio.unit." value="pixel"/>
    <property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="orderName" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="25" splitType="Stretch">
            <textField>
                <reportElement x="9" y="0" width="100" height="25" uuid="1ac7d520-9918-4106-b4ad-1b446da6a01f"/>
                <textFieldExpression><![CDATA[$F{orderName}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

В качестве источника данных для основного отчета я передаю ему список клиентов: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{customers})

И в качестве источника данных для моего подчиненного отчета, дляДля каждого объекта клиента я передаю ему список заказов: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{orders})

Коды были успешно скомпилированы, но список заказов не отображался, как я ожидал.Я вижу только распечатанный список customerName, но не список заказов.

Что я тут не так сделал?Любая помощь станет для меня большим клеем :)

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