Отображать элементы списка по одному без повторяющихся значений - Jasper Reports - PullRequest
0 голосов
/ 16 января 2020

У меня есть три объекта (iPhone, ipad и shoe), которые заполняют список (itemList), который используется в качестве данных для моего отчета. Объекты имеют тип Item и имеют имя, связанное с ними. Мне бы хотелось, чтобы имя первого объекта печаталось рядом с полем stati c «Phone Name», затем имя второго объекта рядом с полем stati c «Game Name», а затем имя третьего объекта рядом с полем stati c. «Название обуви». Я знаю, что это можно сделать, если у вас только одно текстовое поле и одно и то же имя поля stati c, но я хотел бы, чтобы у каждого объекта было свое имя поля stati c, и я хотел бы, чтобы имена только напечатать один раз (без повторных имен). В настоящее время это выглядит так: Текущий вывод отчета Jasper

Мне бы хотелось, чтобы это выглядело так:

Требуемый вывод отчета Jasper

Мой код указан ниже:

Персона. java

package packageOne;

public class Person {
    private String name;
    private int age;


    public String getName(){
    return name;
    }

    public void setName(String name){
    this.name = name;
    }

    public int getAge(){
    return age;
    }

    public void setAge(int age){
    this.age = age;
    }
}

Артикул. java

package packageOne;

import java.util.ArrayList;
import java.util.List;

public class Item {
    private String name;
    private int price;

    private List<Person> people = new ArrayList<Person>();


    public String getName(){
    return name;
    }

    public void setName(String name){
    this.name = name;
    }

    public int getPrice(){
    return price;
    }

    public void setPrice(int price){
    this.price = price;
    }

    public List<Person> getPeople(){
        return people;
    }

    public void setPeople(List<Person> people){
        this.people=people;
    }
}

Подарки. java

package packageOne;

import java.util.ArrayList;
import java.util.List;

public class Gifts {

    private List<Item> items = new ArrayList<Item>();

    public List<Item> getItems(){
        return items;
    }

    public void setItems(List<Item> items){
        this.items = items;
    }

}

JasperTest. java

package packageOne;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.JasperPrint;


public class JasperTest {


    public static void main(String[] args){

        Gifts gift = new Gifts();
        Item iphone = new Item();
        Item ipad = new Item();
        Item shoe = new Item();
        Person person = new Person();

        person.setName("Carl");
        person.setAge(15);

        List<Person> personList = new ArrayList<Person>();
        personList.add(person);

        iphone.setName("iPhone");
        iphone.setPrice(1500);
        ipad.setName("iPad");
        ipad.setPrice(1500);
        shoe.setName("Nike");
        shoe.setPrice(100);

        iphone.setPeople(personList);

        List<Item> itemList = new ArrayList<Item>();
        itemList.add(iphone);
        itemList.add(ipad);
        itemList.add(shoe);

        gift.setItems(itemList);


        String fileName = "FILEPATH";
        String outputName = "FILEPATH";

        try {

                Map<String, Object> parameters = new HashMap<String, Object>();


                JasperPrint jasperPrint = JasperFillManager.fillReport(fileName, parameters, new JRBeanCollectionDataSource(gift.getItems()));

                OutputStream outputStream = new FileOutputStream(new File(outputName));

                JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);

                System.out.println("File Generated");

                }
                catch(JRException ex){
                    ex.printStackTrace();
                } catch(FileNotFoundException ex){
                    ex.printStackTrace();
                }


            }

    }   

JasperTest.jr xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.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="PlantVO" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="55da4c97-0a7c-447f-b3a7-2713d483523d">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["FILEPATH"]]></defaultValueExpression>
    </parameter>
    <field name="name" class="java.lang.String"/>
    <field name="price" class="java.lang.Integer"/>
    <field name="people" class="java.util.List"/>
    <detail>
        <band height="41" splitType="Stretch">
            <textField>
                <reportElement isPrintRepeatedValues="false" x="100" y="0" width="200" height="20" uuid="f2d206d5-61fb-4238-93cf-c7dd16403a48"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement x="100" y="20" width="400" height="20" uuid="f3ca3eba-cb93-4ab4-8931-c399a8430841"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{people})]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "JasperTest_subreport.jasper"]]></subreportExpression>
            </subreport>
            <staticText>
                <reportElement x="0" y="0" width="100" height="20" uuid="36a89b56-5476-4d8f-8b12-6bc7b551f0a5"/>
                <text><![CDATA[Phone Name: ]]></text>
            </staticText>
        </band>
        <band height="20">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20" uuid="7097f9ab-d16b-4a10-b595-c8252c719c69"/>
                <text><![CDATA[Game Name: ]]></text>
            </staticText>
            <textField evaluationTime="Band">
                <reportElement isPrintRepeatedValues="false" x="100" y="0" width="200" height="20" uuid="52f89bfe-4d83-4ff8-a753-ea6af9503233"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
        </band>
        <band height="20">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20" uuid="ea595ee3-209e-41ba-a496-270368ba92f6"/>
                <text><![CDATA[Shoe Name: ]]></text>
            </staticText>
            <textField evaluationTime="Band">
                <reportElement isPrintRepeatedValues="false" x="100" y="0" width="100" height="20" uuid="2701da16-fa78-4f7c-b753-2e461653f1e8"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

JasperTest_subreport.jr xml (не очень нужно, но я просто добавил, потому что он идет с другим отчетом)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.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="PlantAllocationVO_subreport" pageWidth="400" pageHeight="802" columnWidth="400" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="417a7f13-6776-4773-94ab-0be5c01605c7">
    <field name="name" class="java.lang.String"/>
    <field name="age" class="java.lang.Integer"/>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="200" height="20" uuid="34424fa2-18d0-4859-825a-a07f2a826f55"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
            <textField pattern="###0">
                <reportElement x="200" y="0" width="200" height="20" uuid="a0e2ae10-906e-4d0f-aebd-30fc0c694aca"/>
                <textElement textAlignment="Right" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...