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

标签 java jasper-reports line-breaks

我有一个长字符串(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/

相关文章:

java - 我可以在没有 webdriver 的真实浏览器上运行 selenium 2 吗?

java - 如何显示不会像 Snapchat 那样停留在通知抽屉中的应用内通知

java - 将整数参数传递给 Jasper Report 查询给出 SQL 错误运算符不退出 : integer = boolean

没有空格的 YAML 折叠

html - 连字符后没有换行符

html - 如何在 Shiny 中方便地添加多个换行符?

java - JComponent 如何通知其父 J(Internal)Frame 的关闭事件?

java - 文件在打印前打开?

java - 如何在客户端jsp上显示报表?

java - 在 jasper 报告中多次重复所有列