BIRT能识别RTF标签吗?



我有一个数据集,返回一个BLOB字段(这就是BIRT在表中绑定的方式)。在数据库中,数据类型被分类为Long Raw,所以我需要转换二进制数据文本到使用泛型转换函数。

问题是BIRT在转换后似乎不识别嵌入的RTF表达式,但也许我做错了什么。

我使用的是动态文本组件,该组件包含在表达式生成器中转换的数据。财产。此外,内容类型

该字段的值设置为RTF。以下是BIRT显示 的方式
{rtf1ansi
ansicpg1252deff0{fonttbl{f0fnil MS
Sans Serif;}{f1fnilfcharset0 MS Sans
Serif;}}
viewkind4uc1pardqclang1046b
f0fs16 1 xf1'ed-cara de leite
par 1 colher de sopa de fermendo em p
'f3
par 3 x'ed-caras de farinha de trigo
par 3 x'ed-caras de a'e7'facar
par 3 ovos
par 4 colheres de margarinab0f0
par }

如我们所见,文本包含RTF标签与主要内容混合。

这个想法是让birt删除标签或能够以某种方式对它们进行建模。

下面是我期望的输出

1 xícara de leite
1 colher de sopa de fermento
3 xícaras de farinha de trigo

经过一番研究,有了一个可能的答案,但不是完美的答案,因为目标是以某种方式对RTF标记进行建模。

第一步是转换二进制数据

function convert( byteArr ) {
const convertedbyteArr = "";
for(var i = 0; i<byteArr.length;i++){
teste += String.fromCharCode(byteArr[i]);
}
return convertedbyteArr ;
}

下一步是使用regex删除所有RTF标签。这个解决方案是基于这篇文章:正则表达式从RTF字符串中提取文本。

function removeRTF (str) {
var basicRtfPattern = /{*?\[^{}]+;}|[{}]|\[A-Za-z]+n?(?:-?d+)?[ ]?/g;
var newLineSlashesPattern = /\n/g;
var ctrlCharPattern = /n\f[0-9]s/g;
return str
.replace(ctrlCharPattern, "")
.replace(basicRtfPattern, "")
.replace(newLineSlashesPattern, "n")
.replace(/\'c9/g,"É")
.replace(/\'cd/g,"Í")
.replace(/\'ed\-/g,"í")
.replace(/\'f3/g,"ó")
.replace(/\'d3/g,"Ó")
.replace(/\'fa/g,"ú")
.replace(/\'fa/g,"ú")
.replace(/\'da/g,"Ú")
.replace(/\'e7/g,"ç")
.replace(/\'e1/g,"á")
.replace(/\'e1/g,"á")
.replace(/\'e0/g,"à")
.replace(/\'c0/g,"À")
.replace(/\'c1/g,"Á")
.trim();
}

重要的是要注意,重音是单独处理的。

BIRT的旧ROM规范显示,曾经有支持RTF格式文本的计划,但它从未实现(并且永远不会实现)。

在文本文件中编码格式化文本的事实标准现在是HTML。

最新更新