`
RobustTm
  • 浏览: 23948 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

POI 提取Word文本出错

阅读更多

POI提取word出错

代码如下

package com.util.extract;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException;

public class FileExtractor {
		public static String getSuffix(String fileName){
	    String suffix=fileName.substring(fileName.lastIndexOf(".")+1);
	    return suffix;
	}
	public static String wordExtractor(String fileName){	
		try{
		InputStream in = new FileInputStream(fileName);
		String text = "";
		if(getSuffix(fileName).equals("doc")){
			WordExtractor wordExtractor = new WordExtractor(in);
			text = wordExtractor.getText();
		}else if(getSuffix(fileName).equals("docx")){
			OPCPackage opcPackage =  POIXMLDocument.openPackage(fileName);    
			POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);       		
			text = ex.getText();
		}else if(getSuffix(fileName).equals("pdf")){
		    PDFParser p = new PDFParser(in); 
			p.parse();         
            PDFTextStripper ts = new PDFTextStripper();         	         
			text = ts.getText(p.getPDDocument());
		}else{
			text = "";
		}
		in.close();
		return text;
		}catch(IOException e){
			e.printStackTrace();
			return null;
		} catch (XmlException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (OpenXML4JException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;	
		}
	}
	
}

 

测试代码为

public class TestExtractor {
	
	public static void main(String[] args) throws IOException{
		String filename = "test.doc";
		String content = FileExtractor.wordExtractor(filename);
		System.out.println(content);
	}
}

 

提取的文件大小为1.6M,并且不是纯文本,word中还有批注、目录等。

 

异常为

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 204138
	at org.apache.poi.util.LittleEndian.getShort(LittleEndian.java:46)
	at org.apache.poi.hwpf.model.ListLevel.<init>(ListLevel.java:120)
	at org.apache.poi.hwpf.model.ListFormatOverrideLevel.<init>(ListFormatOverrideLevel.java:48)
	at org.apache.poi.hwpf.model.ListTables.<init>(ListTables.java:91)
	at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:236)
	at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:131)
	at org.apache.poi.hwpf.extractor.WordExtractor.<init>(WordExtractor.java:61)
	at org.apache.poi.hwpf.extractor.WordExtractor.<init>(WordExtractor.java:53)
	at com.util.extract.FileExtractor.wordExtractor(FileExtractor.java:41)
	at com.util.extract.TestExtractor.main(TestExtractor.java:17)

 

不明白是什么原因,大致感觉可能是不是word文件不太大?

分享到:
评论
3 楼 linangong 2011-11-18  
把poi这个包更新到poi-3.5-beta6就可以用了
2 楼 RobustTm 2011-07-13  
shenhuawei18 写道
我今天也碰到了这个问题,是不是XWPFWordExtractor对word的大小有什么限制,可不可以在哪进行设置?

感觉不是大小的问题,可能是格式的问题,我也不太清楚,当时打开出错文件后,随便修改保存,再撤销,再保存,与原文件一致,但是再次操作居然没报错,不太清楚说明原因。如果兄台知道,麻烦告诉我,谢谢了。
1 楼 shenhuawei18 2011-05-27  
我今天也碰到了这个问题,是不是XWPFWordExtractor对word的大小有什么限制,可不可以在哪进行设置?

相关推荐

    java poi 替换word文本

    java poi 实现word文本的替换,支持doc和docx格式的文本替换

    用poi提取word中的图片和文字

    注意:先下载开源包poi,把jar文件加入到你的项目里。

    POI解析word2007文本及图片(已测试).doc

    pasrer 方法首先将 Word 2007 文档读取到内存中,然后使用 XWPFWordExtractor 来提取文本内容,并将其存储在 String 对象中。然后,pasrer 方法使用 XWPFPicture 来提取图片内容,并将其存储在 List&lt;XWPFPicture&gt; ...

    POI操作Word中插入文本和图片

    在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 一、Apache POI基础 Apache POI提供了一系列接口和类,用于读写微软的Office文件格式。对于Word处理,...

    [简单]poi读取word 2007简单文本框值

    标题中的“poi读取word 2007简单文本框值”指的是使用Apache POI库来读取Microsoft Word 2007文档中简单文本框内的文本内容。Apache POI是一个流行的开源Java库,用于处理Microsoft Office格式的文件,如Word(.docx...

    POI读取 word 2003 和 word 2007 的例子

    这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...

    使用poi将word读取后替换指定内容后再次生成新word

    使用poi将word读取后替换指定内容后再次生成新word,本人经过测试,拿来即用!

    利用POI将word转换成html实现在线阅读

    在处理Word文档时,POI使用HPSF(HSMF for POI)来解析和生成文档属性,HWPF用于处理老版本的Word(.doc)文档,XWPF则用于处理新版本的Word(.docx)文档。 转换Word到HTML的核心步骤如下: 1. **读取Word文档**...

    POI报表Word导出

    POI报表Word导出

    poi完美word转html

    3. 文本样式:虽然不能完全保留所有样式,但POI会尽可能地保留文本的基本样式,如字体、大小和颜色。 五、限制与注意事项: 1. 不支持分页:转换后的HTML不会包含Word文档中的分页信息,这可能导致长文档在网页预览...

    POI 生成Word文档

    通过掌握以上知识,你可以利用Apache POI创建功能丰富的Word文档,包括文本、样式、表格、图片等元素,实现自动化报告生成、数据导出等多种应用场景。在实际项目中,根据具体需求,灵活运用POI的API,能够极大地提高...

    poi导入word和图片

    本文档将详细介绍如何使用 POI 库来读取 Word 文档(包括 .doc 和 .docx 格式)中的文本内容以及提取其中的图片。 #### 二、环境配置与依赖 为了能够顺利地执行示例代码,需要确保项目的 build 环境包含了以下依赖...

    java poi把word文档转化为html,支持doc。

    Java POI库是一个强大的工具,专门用于处理Microsoft Office格式的文件,包括Word(.doc和.docx)文档。在这个特定的场景中,我们利用POI将Word文档转换为HTML格式,以便于在网页上展示或者进行其他Web相关的操作。...

    POI导出Word 页眉 页脚 标题设置

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本主题中,我们将深入探讨如何使用POI库来导出Word文档,并进行页眉、页脚和标题的设置。这个过程涉及到对Word...

    POI-2.5.2.jar,三个包,另附送POI提取word内容源代码

    包括三个文件: 1、poi-2.5.1.jar 2、poi-contrib-2.5.1.jar 3、poi-scratchpad-2.5.1.jar 经过测试可以使用; 另外,附简单应用实例,通过POI提取word内容源代码!

    poi解析word文档 及 试卷数学公式导入wmf图片转成png图片

    在本场景中,可能涉及读取Word文档中的文本、样式、表格、图像等元素,以便进行进一步的处理或分析。 “试卷数学公式导入wmf图片转成png图片”这部分涉及到两个技术点。首先,试卷通常包含数学公式,这些公式可能以...

    利用poi+word模版书签,向word中插入数据

    在IT行业中,尤其是在文档自动化处理领域,Apache POI是一个非常重要的工具,它允许开发者使用Java来操作Microsoft Office格式的文件,如Word、Excel和PowerPoint。本教程将深入讲解如何利用Apache POI的XWPF模块...

    JAVA-POI读取word每一段所在页码(附依赖jar包).zip

    POI无法读取到word每一段所在的页码。我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档...

    使用poi替换word中的图片

    在IT领域,Apache POI是一个广泛使用的开源库,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本篇将深入探讨如何使用Apache POI库来替换Word...

Global site tag (gtag.js) - Google Analytics