gpt4 book ai didi

java - JasperReport - 换行以在文本字段中显示长文本

转载 作者:IT老高 更新时间:2023-10-28 21:00:00 32 4
gpt4 key购买 nike

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

输出:

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

}

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>

最佳答案

我自己找到了答案:

我对 textField 的属性做了一些额外的研究。和 rectangle成分。发现需要设置以下属性。

对于矩形:

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

对于文本字段:

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

按预期输出:

enter image description here

<detail> ...</detail>修正后的部分:

<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.texttrue在您的所有报告中实现这一目标。

关于java - JasperReport - 换行以在文本字段中显示长文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631806/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com