BIRT 能识别 RTF 标签吗?

Posted

技术标签:

【中文标题】BIRT 能识别 RTF 标签吗?【英文标题】:Does BIRT recognize RTF tags? 【发布时间】:2021-10-08 04:00:37 【问题描述】:

我有一个返回 BLOB 字段的数据集(这就是 BIRT 在表中的绑定方式)。在数据库中,数据类型被归类为 Long Raw,所以我需要使用通用 convert 将 二进制数据 转换为 text 功能。

问题是 BIRT 在转换后似乎无法识别嵌入式 RTF 表达式,但可能是我做错了什么。

我使用了一个 Dynamic Text 组件,该组件包含在 Expression Builder 属性中转换的数据。此外,该字段的内容类型设置为 RTF。

这是 BIRT 的显示方式

\rtf1\ansi
\ansicpg1252\deff0\fonttbl\f0\fnil MS
Sans Serif;\f1\fnil\fcharset0 MS Sans
Serif;
\viewkind4\uc1\pard\qc\lang1046\b
\f0\fs16 1 x\f1\'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 margarina\b0\f0
\par 

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

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

这是我期待的输出

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

【问题讨论】:

【参考方案1】:

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

操作系统转换二进制数据的第一步

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

下一步是使用正则表达式删除所有 RTF 标签。此解决方案基于此帖子:Regular Expression for extracting text from an RTF string。

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();

请务必注意,重音是单独处理的。

【讨论】:

【参考方案2】:

BIRT 的旧 ROM 规范表明,曾几何时有计划支持 RTF 格式的文本,但从未实现(也永远不会实现)。

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

【讨论】:

以上是关于BIRT 能识别 RTF 标签吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在页面中显示并识别HTML 标签字段

“猫狗大战”的代码能实现单一图片识别吗?

如何将 birt 数据集列拆分为多行

如何用VB6发开CCD摄像头,并识别标签上面的条码中的字符?

替换 RTF 文件中的字符串时出现问题 - C#

多标签学习之白话版