转帖:http://topic.csdn.net/u/20090925/10/77f2a756-eee5-4070-96cf-f8fbdf5ca456.html
最近使用到了poi库读word文件。前提是用poi读,所以建议使用别个类库的朋友,就不要回使用别的类库的建议了。
我也想了解下poi读word到底能读到什么程度...
我始终相信有高手没有出现,我想和大家交换下想法,或者是让大家指点下思路。
我这里使用的是poi3.2 final版本。
1、首先是读文本。
这个例子网上很多,但是读出的文本段数对吗?还有警告A property claimed to start before zero, at -512! Resetting it to zero, and hoping for the best解决了吗?问题很多....
现在我来说下我目前的情况:
从一开始运行这个程序开始,就遇到这个问题A property claimed to start before zero, at -512! Resetting it to zero, and hoping for the best。上网搜,没有解决,或者说是没打看懂英文。最近在Javaeye上看到一篇文章http://www.javaeye.com/topic/24352 用他的方法来做,没有了提示,而且段数还正确了。我不仅想问那些都是什么意思,还想问他是从哪里找到相关的资料的。
前几天看到了tm-extrator封装poi的类库,使用这个来读文本,段数问题也没了,而且没有了警告提示。打开WordExtractor类看下,呵呵,和javaeye上的那位仁兄写的东西差不多,不过我还是看不懂,但是估计....呵呵。
到目前为止,警告信息可以搞定,段数读出没有问题了。
2、读出的是纯文本吗?图片是用小方块代替的,超链接是用另一个小方块代替的,表格是用另另一个小方块代替的。
先说下如何读图片,大家是如何学会使用poi读取word里的图片的。我的经验不多,我遇到新的api的时候,我会找类库自带的一些指南,例子看下,从这里入手,开始学习。但是下载的bin包里只有一个api和非常简短的qucik-guide。几乎是没有例子。于是下载了src包,那里可以找到很多的例子。路径poi-3.2-FINAL/src/scratchpad/testcases/org/apache/poi/hwpf里可以看到读图片的例子。
HWPFDocument docB = new HWPFDocument(new FileInputStream(docBFile));
PicturesTable picB = docB.getPicturesTable();
List picturesB = picB.getAllPictures();
List里边的每一个picture.getContent()就会得到图片的字节数组,写到文件或者发给客户就可以了。
图片是可以读了,但是 不是我想要的效果吗?我要把word文件读出来,在网页上给用户显示出来。遇到图的时候给一个链接就可以。
我不知道有什么好的解决办法。我现在虽然是勉强的解决了这个问题,但是我自己不满意,也感觉很勉强。说下我的方式:
我把word读到string里,挨个打出每一个(int)str.charAt(i);发现了string里代表图片的小方块使用1来代替的。
呵呵,于是我把所有的那个方块 用链接替换掉了,问题也算作是勉强的解决了。我能感觉出来,其实poi里可以有更直接当方法来解决这个问题,因为在把word转换为string的时候,可以看出类库开发人员已经将图片用特殊符号替换掉了,只是我不知道怎么罢了。
到目前为止,我的这个想法“我要把word文件读出来,在网页上给用户显示出来。遇到图的时候给一个链接就可以”,也算是解决了。但是word里自己画的图,艺术字,都是有问题的。
3、下一步,要解决表格问题,虽说我还可以使用处理图片的手法尝试做一下表格。但,感觉仍然不是一条正确的路子。
表格出了合并单元格没有很好的处理之外,表格也搞定。
但是poi读word图片还是不过准确,而且有的图片读出来java无法识别出它是一个图片。
转帖:http://topic.csdn.net/u/20090925/10/77f2a756-eee5-4070-96cf-f8fbdf5ca456.html