Pentaho Report Designer 中带下划线的文本

Text with underscore in Pentaho Report Desginer

我有很长的字段值,里面有下划线,结果显示为点点字段值由包含下划线和中间逗号的文件名组成。

我用 space 替换了下划线并使用了 Wrap-text 属性,之后我可以看到所有文件名但没有下划线。不能增加此字段的宽度,因为它太长了。

如何在不截断的情况下查看所有文件名?

据我所知,pentaho 报告不会换行不包含 space 个字符的文本,即使该文本不适合文本字段。查看PRD的jira: http://jira.pentaho.com/browse/PRD-2736

但是您可以将逗号替换为 ", " 字符串:

    =SUBSTITUTE(
        "long_string_number_1,long_string_number_2,long_string_number_3,one_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_long_string,long_string_number_5,long_string_number_6,";
        ",";
        ", "
    )

这可能会降低遇到不适合您的文本框的长字符串的可能性。但是你仍然可能会遇到以下情况(这里第二行(very_.._long_string_number_4)被截断了): 另一种选择 是尝试一些单色space 字体,并在每个 i*n 字符后插入换行符,其中 n 是最大字符数适合您的文本框。

在任何情况下,您都可能希望将文本字段的动态高度 属性 设置为 true,以便在出现新行时该字段会增加其高度。

更新: 按照您的要求,我详细说明了第二个选项: 我的意思是在您的行中插入换行符,以便每一行都适合您的文本字段。

  1. 将文本框的字体设置为单声道spaced – 因此始终会有相同数量的字符适合您的文本字段。

  2. 计算溢出字符串之前的字符数(默认情况下溢出为 ..)。在溢出字符串中添加字符数(默认为 2)。

  3. 在每个第 n 个字符后插入一个换行符。为此,您可以在报告中嵌入一个用 python/java 或其他语言编写的函数:

    3.1。进入 prd 右上角的数据选项卡。右键单击函数项,select 在上下文中添加函数选项 菜单。展开脚本项和 select “Bean-Scripting Framework (BSF)” 选项(如果需要,您可以选择其他语言)。

    3.2。点击你创建的函数,点击PRD右下部分的Expression Programming Language值,然后 select 你想要的语言(select beanshell 对于我的例子)。

    3.3。单击您创建的函数,单击 PRD 右下部分的表达式项,然后单击 [...] 按钮。

    3.4。编写代码以在字符串中插入换行符。这是给你的例子(我不是 java 开发者,所以这段代码可能是 ugly/ineffective/buggy):

    import java.lang.StringBuilder;
    
    // hard-coded string constant as an example data:
    String inputString = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
    // if you want to get a value from your data source
    // try following line (not tested however):
    // String inputString = dataRow.get("yourColumnName");
    
    // change maxLineLength constant to the number of characters
    // that fit your text-field
    int maxLineLength = 23;
    int stringLength = inputString.length();
    
    StringBuilder sb = new StringBuilder();
    int leftBound = 0;
    int rightBound = maxLineLength;
    
    while(rightBound < stringLength) {
        String line = inputString.substring(leftBound, rightBound);
        sb.append(line);
        sb.append("\n");
        leftBound = rightBound;
        rightBound += maxLineLength;
    }
    // append remaining characters.
    sb.append(inputString.substring(leftBound, stringLength));
    
    return sb.toString();
    

    3.5。将文本字段引用的字段更改为您创建的函数的名称(默认情况下类似于 BSFExpression0)。

这是我的示例的输出:

记得用您的数据替换我的 inputString 和 maxLineLength 常量。并将文本字段的动态高度设置为 true。