这里可以读word目录,word表格,word图片。当然不只是读出来,而是将word转成html。(我们的还要将word内容进行分页显示)
我在前两篇里已经写到如何读word的表格,word的图片。
这里边涉及两个定位问题,一是表格位置,另一个是图片位置。
图片位置。我解决图片位置是首先读出word中的图片放到list中去,然后采用文本方式读word,读出来替换(int)1 + ""。插入图片链接。
至于这种方式是否100%奏效,我不清楚。因为我也是读到有图片word后,输出unicode码观察才知道。
ps:昨天翻阅api,读PicturesTable类,那里也是这么说的,应该是没什么问题的。
表格位置。由于是先解决的图片,而且也可以通过简单的方法拿到所有的表格,所以顺着图片的思路就下来了,但是发现用那种方式无法解决。
呵呵,原本要放弃了,但是我一想既然可以从word里拿出表格,就一定有方式定位到表格的开头。于是断点跟入源码。发现了解决方式。就是paragraph.isInTable() && paragraph.getTableLevel() == 1。
考虑到表格开始的特殊判断方式,最终决定使用看似比较笨的方式来读取纯文本。
- 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内存很可能出现内存溢出,这并不是程序有什么死循环。
消耗内存我也愁啊。并发访问岂不是很容易挂掉...~_~