读书人

poi读word 索引 表格 图片 思路

发布时间: 2012-08-27 21:21:57 作者: rapoo

poi读word 目录 表格 图片 思路

转自:http://blog.csdn.net/InviteSun/archive/2009/10/19/4696630.aspx

经过好长时间的挣扎,终于用poi基本上解决了公司的需求---读word。

这里可以读word目录,word表格,word图片。当然不只是读出来,而是将word转成html。(我们的还要将word内容进行分页显示)

我在前两篇里已经写到如何读word的表格,word的图片。至于word的目录,我是读纯文本后去特殊字符(乱码)的。去纯文本中的乱码上一篇也写到。

这里边涉及两个定位问题,一是表格位置,另一个是图片位置。

图片位置。我解决图片位置是首先读出word中的图片放到list中去,然后采用文本方式读word,读出来替换(int)1 + ""。插入图片链接。

至于这种方式是否100%奏效,我不清楚。因为我也是读到有图片word后,输出unicode码观察才知道。

ps:昨天翻阅api,读PicturesTable类,那里也是这么说的,应该是没什么问题的。?

表格位置。由于是先解决的图片,而且也可以通过简单的方法拿到所有的表格,所以顺着图片的思路就下来了,但是发现用那种方式无法解决。

呵呵,原本要放弃了,但是我一想既然可以从word里拿出表格,就一定有方式定位到表格的开头。于是断点跟入源码。发现了解决方式。就是paragraph.isInTable() && paragraph.getTableLevel() == 1。

考虑到表格开始的特殊判断方式,最终决定使用看似比较笨的方式来读取纯文本。

?

view plaincopy to clipboardprint?
  1. HWPFDocument?hwpfDoc?=?new?HWPFDocument(inputStream);??
  2. Range?range=?hwpfDoc.getRange();??
  3. int?paraNum?=?range.numParagraphs();??
  4. List?tempList?=?new?ArrayList();??
  5. boolean?tableBegin?=?true;??
  6. ????????String?str?=?null;??
  7. ????????for?(int?j?=?0;?j?<?paraNum;?j++)?{?????
  8. ????????????Paragraph?para?=?range.getParagraph(j);??
  9. ????????????if(para.isInTable()&&?tableBegin)?{?//在表格里,且是表格开始。??
  10. ????????????????str?=?"这是一个表格标志";??
  11. ????????????????tableBegin?=?false;??
  12. ????????????}?else?if(!para.isInTable())?{//不在表格里??
  13. ????????????????tableBegin?=?true;??
  14. ????????????????str?=?para.text();??
  15. ????????????}else?{??????????????????????//在表格里,但不是表格开始。??
  16. ????????????????continue;??
  17. ????????????}??
  18. ????????????str?=?doLuanMa(str);??
  19. ????????????//替换图片连接。??
  20. ????????????while?(str.indexOf((int)1?+?"")?!=?-1)?{??
  21. ????????????????str?=?str.replaceFirst((int)1?+?"",?"<a?href="\"?mce_href="\""WordPicture?pic="??
  22. ????????????????????????+?i?+?"\">图片</a>");??
  23. ????????????????i++;??
  24. ????????????}??
  25. ????????????tempList.add(str);??

?


表格处理余下的思路就和图片一样了。

最后在唠叨两句,由于处理过程消耗的内存不小,没有修改Jre内存很可能出现内存溢出,这并不是程序有什么死循环。

消耗内存我也愁啊。并发访问岂不是很容易挂掉...~_~

1 楼 flamenco 2010-12-30 POI能动态创建表格并填充数据吗?

读书人网 >软件架构设计

热点推荐