我有一个冗长的字段值,在其中有下划线,因此显示点dot点字段值由包含下划线和逗号的文件名组成。
我用空格替换下划线并使用了Wrap-text属性,之后我可以看到所有文件名但没有下划线。增加此字段的宽度不是一个选项,因为它太长了。
如何在不被截断的情况下查看所有文件名?
答案 0 :(得分:2)
据我所知,即使文本不适合文本字段,pentaho报告也不会包含不包含空格字符的文本。见珠三角的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,";
",";
", "
)
这可能会降低遇到不适合您的文本框的长字符串的可能性。但是,您仍可能遇到以下情况(此处第二行(非常_.._ long_string_number_4)被截断):
另一个选项是尝试使用单空格字体,并在每个i*n
个字符后插入换行符,其中n
是适合您文本框的最大字符数。< / p>
在任何情况下,您可能希望将text-field的dynamic-height属性设置为true,这样如果出现新行,该字段将增加它的高度。
<强>更新强> 根据您的要求,我详细说明了第二种选择: 我的意思是在你的行中插入换行符,以便每行符合你的文本字段。
将文本框的字体设置为等宽字符 - 因此,文本字段的字符数始终相同。
计算溢出字符串前的字符数(默认情况下溢出为..)。添加溢出字符串中的字符数(默认为2)。
在每个第n个字符后插入一个换行符。为此,您可以嵌入报告使用python / java或其他语言编写的函数:
3.1。进入prd右上角的数据选项卡。右键单击Functions项,在上下文中选择Add functions选项 菜单。展开脚本项并选择“Bean-Scripting Framework(BSF)” 选项(如果需要,您可以选择其他语言)。
3.2。单击您创建的功能,单击PRD右下方的表达式编程语言值,然后单击 选择你想要的语言(为我的例子选择beanshell)。
3.3。单击您创建的功能,单击PRD右下部分的Expression项,然后单击[...]按钮。
3.4。编写代码以在您的字符串中插入换行符。这是一个例子(我不是java开发人员,所以这段代码可能是 丑/无效/越野车):
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。将text-field引用的字段更改为您创建的函数的名称(默认情况下为BSFExpression0)。
这是我的例子的输出:
请记住用您的数据替换我的inputString和maxLineLength常量。并将text-field的dynamic-height设置为true。