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,以便在出现新行时该字段会增加其高度。
更新:
按照您的要求,我详细说明了第二个选项:
我的意思是在您的行中插入换行符,以便每一行都适合您的文本字段。
将文本框的字体设置为单声道spaced – 因此始终会有相同数量的字符适合您的文本字段。
计算溢出字符串之前的字符数(默认情况下溢出为 ..)。在溢出字符串中添加字符数(默认为 2)。
在每个第 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。
我有很长的字段值,里面有下划线,结果显示为点点字段值由包含下划线和中间逗号的文件名组成。
我用 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)被截断了):i*n
字符后插入换行符,其中 n
是最大字符数适合您的文本框。
在任何情况下,您都可能希望将文本字段的动态高度 属性 设置为 true,以便在出现新行时该字段会增加其高度。
更新: 按照您的要求,我详细说明了第二个选项: 我的意思是在您的行中插入换行符,以便每一行都适合您的文本字段。
将文本框的字体设置为单声道spaced – 因此始终会有相同数量的字符适合您的文本字段。
计算溢出字符串之前的字符数(默认情况下溢出为 ..)。在溢出字符串中添加字符数(默认为 2)。
在每个第 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。