【问题标题】:JasperReport - wrap text to show long text in textfieldJasperReport - 换行以在文本字段中显示长文本
【发布时间】:2012-05-17 07:51:25
【问题描述】:

我在我的应用程序中使用 jasper 报告作为报告工具。我想知道如何通过将reportElement 动态扩展到垂直方向(扩展行大小,而不是列宽)来包装长文本。或者有什么办法可以做到这一点?我下面的方法是截断长文本“Some very long name”。你能给我一些建议吗?

输出:

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>());
    }

}

Jasper 报告 JrXML 文件 - 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>

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    我自己找到了答案:

    我对@9​​87654322@ 和rectangle 组件的属性做了一些额外的研究。发现需要设置以下属性。

    对于矩形:

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

    对于文本字段:

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

    按预期输出:

    更正后的&lt;detail&gt; ...&lt;/detail&gt;部分:

    <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>
    

    更新

    您还可以将属性 net.sf.jasperreports.print.keep.full.text 设置为 true 以在您的所有报告中实现这一点。

    【讨论】:

    • 但是如果我们因此想要将其他元素向下推怎么办。在这种情况下它似乎不起作用
    • 这个可以用于静态文本吗?
    • 我不确定。你能试试吗?
    【解决方案2】:

    您还可以通过使用以下设置到文本字段的属性来使截断更优雅。检查这个sample

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

    【讨论】:

      【解决方案3】:

      转到文本字段属性,然后将Text Adjust 设置为StretchHeight

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        相关资源
        最近更新 更多