gpt4 book ai didi

java - 碧 Jade 报告 : How to break lines base on a character count

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:30 25 4
gpt4 key购买 nike

我有一个长字符串(150 个字符)。我将 text_1 字符串参数放在报告中,我希望在第 50 个字符处自动 jasper 分界线。

<textFieldExpression><![CDATA[$F{TEXT_1}]]></textFieldExpression>

例子:

My string: 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

我想用 JasperReports 打印:

01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789
01234567890123456789012345678901234567890123456789

我想在Jasper中执行,而不是在Java中执行请给我一个解决方案。

最佳答案

方法

有几种方法:

  • 设置 textField 的宽度并将 isStretchWithOverflow 属性设置为 true。此解决方案取决于字体指标。

  • 使用 Java 表达式。例如,您可以使用 Guava 库。在这种情况下,您应该向模板添加 import 语句。

例子

在这个例子中,只有Title band 用于演示这两种解决方案。使用空数据源。

报告模板

演示解决任务的两种变体。

第一个 textField 的宽度只够显示 50 个符号。借助 isStretchWithOverflow 属性,文本将被分成几行(textField 的高度将动态增加)。

第二个 textField 的表达式(查看 textFieldExpression)使用 Guava 库。

Joiner.on("\n").join(Splitter.fixedLength(50).split(value)) - Splitter.fixedLength(int) 方法允许我们拆分字符串每 50 个字符和 Joiner.on(String) 方法帮助我们用换行符连接字符串。

<?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="break_lines" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<import value="com.google.common.base.*"/>
<parameter name="LONG_TEXT" class="java.lang.String">
<defaultValueExpression><![CDATA["012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"]]></defaultValueExpression>
</parameter>
<title>
<band height="347" splitType="Stretch">
<textField isStretchWithOverflow="true">
<reportElement x="110" y="10" width="280" height="30"/>
<textFieldExpression><![CDATA[$P{LONG_TEXT}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement x="20" y="100" width="525" height="30"/>
<textFieldExpression><![CDATA[Joiner.on("\n").join(Splitter.fixedLength(50).split($P{LONG_TEXT}))]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>

输出结果

Jaspersoft Studio 中的输出结果将是:

The result in JSS

一个 150 字符的字符串被分成 3 行,每行包含 50 个字符。

关于java - 碧 Jade 报告 : How to break lines base on a character count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134318/

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