文档章节

poi操作word文档文件操作

思维80
 思维80
发布于 2015/05/24 15:27
字数 1449
阅读 75
收藏 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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包。

新建一个测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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文件中换行也看成是一个段,测试如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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文件的格式去掉了,获取到文本的内容。

© 著作权归作者所有

思维80
粉丝 8
博文 111
码字总数 42366
作品 0
西安
程序员
私信 提问
使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW
2012/10/26
1K
0
java获取word里面的文本

需求场景   开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字...

山里的红杏
2018/05/10
39
0
使用POI读写word doc文件

Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档。在HWPFDocument里面有这么几个概念: l Range:它表示一个范围,这个...

Mr_Damen
2016/10/19
153
0
JavaScript与Excel灵活交互制作Web报表

【IT168 技术】Web报表的开发是一个比较常见的功能,然而在B/S构件上实现这些功能并没有在C/S构架上那些简单,针对这样的问题,本篇文章提供相应的解决方案,在下面的内容中将介绍JS与Excel...

天极网
2012/03/01
0
0
Java语言如何将word表格中的数据取出来存放数据库

前言: 我们大家都知道,在Java的环境中进行office的操作是需要office的接口来实现的.目前比较流行的解决方案有POI和openoffice.首先说POI方案,它的功能局限性很大,对于excel的读取和写入挺方便...

山里的红杏
2018/09/18
11
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部