您的位置:首页 > 其它

利用poi操作word文档(针对docx格式)

2013-03-13 09:17 429 查看
原文地址:http://blog.csdn.net/njchenyi/article/details/6901605

xiaogugood注:在我自己搭建环境时,因为下载的二进制包没有附带操作文档,所以我是将二进制包解压后所得的所有jar文件都添加进项目的lib目录下,并都添加进了项目的buildpath,然后就好使了。

一:认识POI

Apache POI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的3.5版本有很多改进,加入了对采用OOXML格式的Office 2007支持,如xlsx、docx、pptx文档。

POI主页:poi.apache.org/

二:POI3.5相关下载

3.5Jar包下载地址

3.5源码下载地址

三:POI组成部分概览

以下是POI的几个重要组成部分,以及各组件的功能概述。

POIFS

POIFS是该项目的最古老,最稳定的一部分。.这是格式化OLE 2复合文档为纯Java的接口。 它同时支持读写功能。所有的组件,最终都依赖于它的定义

HSSF 和 XSSF

HSSF: MS-Excel 97-2003(.xls),基于BIFF8格式的J***A接口。

XSSF:MS-Excel 2007+(.xlsx),基于OOXML格式的J***A接口。

HWPF 和XWPF

HWPF: MS-Word 97-2003(.doc),基于BIFF8格式的J***A接口。只支持.doc文件简单的操作,读写能力有限。本API为POI项目早期开发,很不幸的 是主要负责HWPF模块开发的工程师-“Ryan Ackley”已经离开Apache组织,现在该模块没有人维护、更新、完善。

XWPF:MS-Word 2007+(.docx),基于OOXML格式的J***A接口。较HWPF功能完善。

四:利用POI提取Word文本内容及批注

97-2003:

import org.apache.poi.POITextExtractor;

import org.apache.poi.hwpf.extractor.WordExtractor;

//得到.doc文件提取器

org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath));

//提取.doc正文文本

String text = doc.getText();

//提取.doc批注

String[] comments = doc. getCommentsText();

2007

import org.apache.poi.POITextExtractor;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

import org.apache.poi.xwpf.usermodel.XWPFComment;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

//得到.docx文件提取器

org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath));

//提取.docx正文文本

String text = docx.getText();

//提取.docx批注

org.apache.poi.xwpf.usermodel.XWPFComment[] comments = docx.getDocument()).getComments();

for(XWPFComment comment:comments){

comment.getId();//提取批注Id

comment.getAuthor();//提取批注修改人

comment.getText();//提取批注内容

}

五:利用POI提取Word总页数、总字符数...

97-2003

WordExtractor doc = new WordExtractor(new FileInputStream(filePath));//.doc格式Word文件提取器

int pages = doc.getSummaryInformation().getPageCount();//总页数

int wordCount = doc.getSummaryInformation().getWordCount();//总字符数

2007:

XWPFDocument docx = nnew XWPFDocument(POIXMLDocument.openPackage(filePath));

int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数

int characters = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的总字符数 另外还有getCharactersWithSpaces()方法获取带空格的总字数。

小技巧:

2007采用了全新的OFFICE OPEN XML格式来存储,跟以前二进制文件格式的office 97-2003(.doc、.xls...)不同,所以可以直接重命名xx.docx的文件为xx.zip,用WinRar打开可以看到office2007的存储文件,其中word/document.xml里面保存了最重要的正文内容,word/comments.xml保存的是批注内容,可以多研究一下这些文件,有助于开发~

Office Open XML 文件格式简介 www.microsoft.com/china/msdn/library/office/office/OfficeOpenXMLFormats.mspx

随着20世纪90年代XML的出现,企业计算客户开始逐渐认识到,在他们所依赖的计算机产品和应用中采用开放的格式和标准所带来的商业价值。IT专业人员将从通用的数据格式中受益匪浅,这种格式可能是XML,因为它拥有被应用程序、平台和Internet浏览器读取的能力。

同样,随着在Microsoft Office 2000中对于XML格式的支持与采用,开发人员开始认识到,他们需要将以前的Microsoft Office版本中的二进制文件格式转换为XML格式。二进制文件(.doc,.dot,.xls,以及.ppt文件)在过去几年中一直肩负着存储和转换数据的重任,而现在它们无法满足新的市场需求的挑战,其中包括轻松地在异构应用之间传递数据,以及允许用户从这些数据中搜集商业信息。

2007 Microsoft Office system为Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007采用了基于XML的文件格式,从而延续了这种转移。新的文件格式,称为Office
Open XML格式,解决了上述市场需求的问题,同时改变了您基于Microsoft Office文档建立解决方案的方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: