java 读取rtf字节_Java-Apache POI-在DB中读取和存储RTF内容

正确的是,toString()方法将仅返回HSSFRichTextString的未格式化String内容.

这是一种从HSSFRichTextString中提取所有其他重要数据以与字符串值一起存储的方法.

与my answer to this question非常相似,从HSSFRichTextString中提取富文本格式信息,并将该数据存储在要创建的类FormattingRun中.

public class FormattingRun {

private int beginIdx;

private int length;

private short fontIdx;

public FormattingRun(int beginIdx, int length, short fontIdx) {

this.beginIdx = beginIdx;

this.length = length;

this.fontIdx = fontIdx;

}

public int getBegin() { return beginIdx; }

public int getLength() { return length; }

public short getFontIndex { return fontIdx; }

}

然后,调用Apache POI方法提取该数据.

> numFormattingRuns()-返回在HSFFRichTextString中运行的格式化次数.

> getFontOfFormattingRun(int)-返回出现在字符串中指定位置的短字体索引

现在,实际提取数据:

List formattingRuns = new ArrayList();

int numFormattingRuns = richTextString.numFormattingRuns();

for (int fmtIdx = 0; fmtIdx < numFormattingRuns; fmtIdx)

{

int begin = richTextString.getIndexOfFormattingRun(fmtIdx);

short fontIndex = richTextString.getFontOfFormattingRun(fmtIdx);

// Walk the string to determine the length of the formatting run.

int length = 0;

for (int j = begin; j < richTextString.length(); j++)

{

short currFontIndex = richTextString.getFontAtIndex(j);

if (currFontIndex == fontIndex)

length++;

else

break;

}

formattingRuns.add(new FormattingRun(begin, length, fontIndex));

}

要将这些数据存储在数据库中,首先要认识到HSSFRichTextString和FormattingRun之间存在一对多的关系.因此,在您计划存储富文本字符串数据的任何Oracle表中,都需要与另一个存储格式化运行数据的新表建立外键关系.像这样:

Table: rich_text_string

rts_id NUMBER

contents VARCHAR2(4000)

rts_id是主键,并且:

Table: rts_formatting_runs

rts_id NUMBER

run_id NUMBER

run_pos NUMBER

run_len NUMBER

font_index NUMBER

其中(rts_id,run_id)是主键,而rts_id则指向rich_text_string表.

使用您喜欢的Java到数据库框架(JDBC,Hibernate等),将String值存储到rich_text_string中的内容中,并将关联的FormattingRun对象数据存储到rt_formatting_runs中.

请注意-字体索引仅在工作簿中有效.您还需要存储HSSFWorkbook中的字体信息,以赋予font_index含义.

它没有存储为CLOB,但是可以说这种方式存储的数据更有意义.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值