poi操作word文档文件操作

系统 1819 0
      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文档建立解决方案的方式

POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件。

POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便。

为了说明POI提起Word文件的方便和简单,通过提取一个Word文件的文本来,来了解POI API的功能。

假设在本地磁盘中存在一个Word文件

E:\POI\word\JBoss3.0 下配置和部署EJB简介.doc文件是具有格式的,内容如图所示:


下面看看提取它的内容是多么简单。

首先从Apache网站上下载POI的相关jar包。

新建一个测试类:

      package org.shirdrn.word; 



import java.io.File; 

import java.io.FileInputStream; 

import java.io.FileNotFoundException; 

import java.io.IOException; 



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



public class MyWordExtractor { 



public static void main(String[] args) { 

   File file = new File("E:\\POI\\word\\JBoss3.0 下配置和部署EJB简介.doc"); 

   try { 

    FileInputStream fis = new FileInputStream(file); 

    WordExtractor wordExtractor = new WordExtractor(fis); 

    System.out.println("【 使用getText()方法提取的Word文件的内容如下所示:】"); 

    System.out.println(wordExtractor.getText()); 

   } catch (FileNotFoundException e) { 

    e.printStackTrace(); 

   } catch (IOException e) { 

   e.printStackTrace(); 

} 

} 

} 
    

 

提取Word文件的文本内容,打印到控制台上,如下所示:

使用WordExtractor类的getTextFromPieces()方法提取:

wordExtractor.getTextFromPieces();

结果和上面是一样的。

WordExtractor类还有一个可以提取Word文件的各个段落的方法getParagraphText(),返回一个String[]数组,数组中每个元素为一个段的文本内容。

这里,对Word文件中换行也看成是一个段,测试如下:

      package org.shirdrn.word; 



import java.io.File; 

import java.io.FileInputStream; 

import java.io.FileNotFoundException; 

import java.io.IOException; 



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



public class MyWordExtractor { 



public static void main(String[] args) { 

   File file = new File("E:\\POI\\word\\JBoss3.0 下配置和部署EJB简介.doc"); 

   try { 

    FileInputStream fis = new FileInputStream(file); 

    WordExtractor wordExtractor = new WordExtractor(fis); 

    System.out.println("【 使用getText()方法提取的Word文件的内容如下所示:】"); 

    String[] paragraph = wordExtractor.getParagraphText(); 

    System.out.println("该Word文件共有"+paragraph.length+"段。"); 

    for(int i=0;i<paragraph.length;i++){ 

     System.out.println("< 第 "+(i+1)+" 段的内容为 >"); 

     System.out.println(paragraph[i]); 

    } 

   } catch (FileNotFoundException e) { 

    e.printStackTrace(); 

   } catch (IOException e) { 

   e.printStackTrace(); 

} 

} 

} 
    

提取Word文件的文本内容,打印到控制台上,如下所示:

从上面的Word文件可以看出,最后一行是Word文件的一个换行符,使用WordExtractor提取时,也把它默认成为一个段,因为一个段结束后应该有一个回车换行符。

如果有多个Word文件,而且放在不同的目录下,要提取它们的文本内容,可以实现一个递归的函数,通过深度遍历,为每一个Word文件进行提取。

如果需要,可以将提取到的Word文件的文本内容输出到本地磁盘中,比如以txt记事本的根式保存。

从上面可以看出,提取Word文件的文本内容,实际上是将Word文件的格式去掉了,获取到文本的内容。

poi操作word文档文件操作


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论