数据库中blob字段为trf格式的数据中表格数据的提取

最近开发时,客户说需要根据数据库中某张表的blob字段内容做业务处理,但是字段为rtf格式,我需要解析出这个格式中表格的数据,但是直接解析出文本是没有格式的,也就无法提取出数据。

DefaultStyledDocument document = new DefaultStyledDocument();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(sfsf.getBytes("utf-8"));
RTFEditorKit rtfek = new RTFEditorKit(); 
rtfek.read(byteArrayInputStream, document, 0);
String string = document.getText(0, document.getLength());

于是便想曲线救国,先把rtf格式数据写入word文档,再使用poi解析表格中的数据,写代码的过程非常顺利,当我以为马上要胜利的时候,现实狠狠抽了我一个耳光,文件是可以生成,使用office也可打开,但是java再做解析的时候又报错了,网上查了查,说是格式有问题,电脑上另存为新文件,解析新文件就可以了,我还真尝试了一下,果然可以。但是我不能读一条数据手动另存为一次吧,实在是尴尬。就是下面代码第二行报错。

FileInputStream inputStream = new FileInputStream(file);
POIFSFileSystem system = new POIFSFileSystem(inputStream);
HWPFDocument document = new HWPFDocument(system);
Range range = document.getRange();
TableIterator tableIterator = new TableIterator(range);
while (tableIterator.hasNext()) {
	Table table = (Table)tableIterator.next();
	......
}

实在是没办法,既然还不行,没办法,研究一下rtf格式吧,既然是格式肯定有规律。我着重看了一下rtf的表格的格式,表格的每一行,每一格都是以特定字符开始和结束的,我只需要在每一行中随便插入一个字符或者多个字符,在每一个格中插入一个或者多个字符,解析成文本之后,我再依据我插入的特定字符串提取我需要的数据不就行了,于是这个问题终于解决了。

//举个例子
// rtf格式的表格每一行都是以\throwd开始 以\cell结束
// \throwd 1 \cell\... 2 \cell \throwd 1 \cell 2 \cell\...
//替换为
//\throwd 1 xxxx\cell\... 2 yyyy\cell \throwd 1 xxxx\cell 2 yyyy\cell \...
//我就可以解析为两条数据
//每一条数据我就可以解析为两个字段,于是问题就解决了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值