web-dev-qa-db-fra.com

JasperReport - envelopper le texte pour afficher le texte long dans le champ de texte

J'utilise le rapport Jasper comme outil de reporting dans ma candidature. Et je me demande comment puis-je envelopper le long texte en développant le reportElement dynamiquement dans le sens vertical (en élargissant la taille de la ligne, pas la largeur de la colonne). Ou existe-t-il un moyen d'y parvenir? Mon approche ci-dessous est de tronquer le long texte "n nom très long". Pouvez-vous me donner quelques suggestions?

Sortie:

enter image description here

import Java.io.File;
import Java.util.ArrayList;
import Java.util.HashMap;
import Java.util.List;
import Java.util.Map;

import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;

public class JrUtils {
    public static void showJrReport(List objectList, String fileName, String title, Map parameters) {
        try {

            File f = new File(fileName);
            JasperDesign jasperDesign = JRXmlLoader.load(f.getAbsolutePath());
            JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(objectList);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);
            JasperViewer jv = new JasperViewer(jasperPrint, false);
            jv.setTitle(title);
            jv.setVisible(true);

        } catch (Exception e) {
            e.printStackTrace();

        }
    }

    public static void main(String[] args) {
        List<Person> pList = new ArrayList<Person>();

        Person p1 = new Person();
        p1.setPersonName("Some Name ");
        p1.setAddress("Nepal - Address Fits Here");

        Person p2 = new Person();
        p2.setPersonName("Some very long name");
        p2.setAddress("Nepal - Address Fits Here");

        pList.add(p1);
        pList.add(p2);

        showJrReport(pList, "testReport.jrxml", "Test Report", new HashMap<Object, Object>());
    }

}

Fichier JrXML du rapport Jasper - testReport.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="report name" pageWidth="250" pageHeight="400" columnWidth="210" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="2.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <field name="personName" class="Java.lang.String"/>
    <field name="address" class="Java.lang.String"/>
    <columnHeader>
        <band height="23" splitType="Stretch">
            <rectangle>
                <reportElement x="0" y="0" width="88" height="23"/>
            </rectangle>
            <rectangle>
                <reportElement x="88" y="0" width="122" height="23"/>
            </rectangle>
            <staticText>
                <reportElement x="0" y="0" width="88" height="23"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Name]]></text>
            </staticText>
            <staticText>
                <reportElement x="88" y="0" width="122" height="23"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Address]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="21" splitType="Stretch">
            <rectangle>
                <reportElement x="0" y="0" width="88" height="21"/>
            </rectangle>
            <textField>
                <reportElement x="0" y="0" width="88" height="21"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression>
            </textField>
            <rectangle>
                <reportElement x="88" y="0" width="122" height="21"/>
            </rectangle>
            <textField>
                <reportElement x="88" y="0" width="122" height="21"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
32
gtiwari333

J'ai trouvé la réponse moi-même:

J'ai fait quelques recherches supplémentaires sur les propriétés des composants textField et rectangle. Et constaté que je dois définir les propriétés suivantes.

Pour le rectangle:

        <rectangle>
            <reportElement stretchType="RelativeToBandHeight" ... />
        </rectangle>

Pour textField:

        <textField isStretchWithOverflow="true">
            ...
        </textField>

Sortie comme prévu:

enter image description here

Le <detail> ...</detail> section après correction:

<detail>
        <band height="21" splitType="Stretch">
            <rectangle>
                <reportElement stretchType="RelativeToBandHeight" x="0" y="0" width="88" height="21"/>
            </rectangle>
            <textField isStretchWithOverflow="true">
                <reportElement x="2" y="0" width="84" height="21"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{personName}]]></textFieldExpression>
            </textField>
            <rectangle>
                <reportElement stretchType="RelativeToBandHeight" x="88" y="0" width="122" height="21"/>
            </rectangle>
            <textField isStretchWithOverflow="true">
                <reportElement x="90" y="0" width="118" height="21"/>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{address}]]></textFieldExpression>
            </textField>
        </band>
    </detail>

MISE À JOUR

Vous pouvez également définir la propriété net.sf.jasperreports.print.keep.full.text à true pour y parvenir dans tous vos rapports.

62
gtiwari333

Vous pouvez également rendre la troncature élégante en utilisant les propriétés suivantes définies sur le champ de texte. Vérifiez cela exemple

net.sf.jasperreports.text.truncate.at.char 
net.sf.jasperreports.text.truncate.suffix 
net.sf.jasperreports.print.keep.full.text 
6
Cid