poi读word 索引 表格 图片 思路
poi读word 目录 表格 图片 思路转自:http://blog.csdn.net/InviteSun/archive/2009/10/19/4696630.aspx经
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?
- HWPFDocument?hwpfDoc?=?new?HWPFDocument(inputStream);??
- Range?range=?hwpfDoc.getRange();??
- int?paraNum?=?range.numParagraphs();??
- List?tempList?=?new?ArrayList();??
- boolean?tableBegin?=?true;??
- ????????String?str?=?null;??
- ????????for?(int?j?=?0;?j?<?paraNum;?j++)?{?????
- ????????????Paragraph?para?=?range.getParagraph(j);??
- ????????????if(para.isInTable()&&?tableBegin)?{?//在表格里,且是表格开始。??
- ????????????????str?=?"这是一个表格标志";??
- ????????????????tableBegin?=?false;??
- ????????????}?else?if(!para.isInTable())?{//不在表格里??
- ????????????????tableBegin?=?true;??
- ????????????????str?=?para.text();??
- ????????????}else?{??????????????????????//在表格里,但不是表格开始。??
- ????????????????continue;??
- ????????????}??
- ????????????str?=?doLuanMa(str);??
- ????????????//替换图片连接。??
- ????????????while?(str.indexOf((int)1?+?"")?!=?-1)?{??
- ????????????????str?=?str.replaceFirst((int)1?+?"",?"<a?href=""?mce_href="""WordPicture?pic="??
- ????????????????????????+?i?+?"">图片</a>");??
- ????????????????i++;??
- ????????????}??
- ????????????tempList.add(str);??
?
表格处理余下的思路就和图片一样了。
最后在唠叨两句,由于处理过程消耗的内存不小,没有修改Jre内存很可能出现内存溢出,这并不是程序有什么死循环。
消耗内存我也愁啊。并发访问岂不是很容易挂掉...~_~
1 楼 flamenco 2010-12-30 POI能动态创建表格并填充数据吗?