使用Apache POI和OpenOffice API获取微软Office系列文档的页数

这常常会导致用户无法获得正确的 Word 文档页数。对此,我们对 Apache POI 和 OpenOffice API 进行简要的介绍,并结合使用 Apache POI 和 OpenOffice API 开发了一套获取微软 Office 系列文档(WORD, EXCEL and POWERPOINT)的页数的解决方案,以方便广大的开发人员快速方便地应用到自己的项目中。

Apache POI 是一套用于访问微软 Office 格式文档 (Word, Excel and PowerPoint) 的 Java API。其中用于操作 Excel 格式文件的 API 是 HSSF,用于操作 Word 格式文件的 API 是 HWPF 以及用于操作 PowerPoint 格式文件的 API 是 HSLF。

POI 的官方网站是 http://poi.apache.org,用户可以先从这里下载最新的版本 3.6,下载解压后里面有三个 jar 包(poi-3.6-20091214.jar,poi-contrib-3.6-20091214.jar 和 poi-scratchpad-3.6-20091214.jar)将这三个 jar 包拷贝至 Eclipse 工程的 lib 目录中,然后刷新工程即可加载 POI 的类库。

POI 主要组成部分

POIFS:POIFS 是该项目的最古老,最稳定的一部分,它同时支持读写功能,所有的组件最终都依赖于它的定义。

POIFS 对于 OLE 2 文件操作: POIFS 的基础是最古老和最稳定的项目的一部分。这是我们的 OLE 2 复合文档格式的纯 Java 实现。它同时支持阅读和书写功能。我们的组成部分都最终依赖于它的定义。更多信息请参阅 POIFS 项目页。

HSSF 对于 Excel 文件操作:HSSF 是针对 Microsoft Excel 97(-2003)文件格式(BIFF8)的文档操作的纯 Java 实现。它支持阅读和书写能力。更多信息请参阅 HSSF 项目页。

HWPF 对于 Word 文件操作:HWPF 是针对 Microsoft Word 97 文件格式的文档操作的纯 Java 接口。该组件是在发展的初期阶段,对 word 文档的读写能力有限,仅仅可以阅读和书写简单的 word 文件,更多信息 HWPF 请参阅 HWPF 的项目页。

HSLF 对于 PowerPoint 文件操作:HSLF 是针对 Microsoft PowerPoint 97(-2003)文件格式的文档操作的纯 Java 接口。它支持阅读和书写能力。更多信息请参阅 HSLF 项目页。

HDGF 对于 Visio 文件操作:除此之外 POI 还提供了 HDGF 对微软 Visio97(-2003)文件格式的文档操作的纯 Java 接口。它目前只支持读取操作,在一个很低的水平,只支持简单的文本提取。更多信息请参阅 HDGF 项目页。

HPSF 文档属性:HPSF 是这对 OLE 2 设置格式的纯 Java 接口。主要是用来存储文件的属性集(如:标题,作者,最后修改日期等属性),他们可以为特定应用目的所使用。更多信息请参阅 HPSF 项目页。

下面我们简单的介绍一下项目中经常会使用到的对于 Excel 和 Word 格式文件进行操作的接口:

HSSF 接口

目前 POI 比较成熟的部分是 HSSF 接口,处理 MS Excel(97-2003)对象。它不像我们仅仅使用 csv 生成的没有格式的可以由 Excel 转换的东西,而是真正的 Excel 对象,你可以控制一些属性如 cell,sheet 等等。当然,HSSF 也有一些缺点,比如不能直接支持 Excel 图表,包与包之间依赖关系比较复杂等等。

对于统计页数 (sheet 个数 ) 来说,HSSF 接口可以很简单的完成这一功能。下面我们简单的介绍一下 HSSF 接口:

HSSF 提供给我们使用的对象在 org.apache.poi.hssf.usermodel 包中,主要部分包括 Excel 对象,样式和格式,还有辅助操作。主要有以下几种对象:

HSSFWorkbook: 对应于 Excel 的文档对象

HSSFSheet: 对应于 Excel 的表单

HSSFRow: 对应于 Excel 的行

HSSFCell: 对应于 Excel 的格子单元

HSSFFont: 对应于 Excel 字体

HSSFName: 对应于 Excel 名称

HSSFDataFormat: 对应于日期格式

HSSFHeader: 对应于 Sheet 头

HSSFFooter: 对应于 Sheet 尾

HSSFCellStyle: 对应于 Cell 样式

辅助操作包括:

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

HWPF 接口

HWPF 主要用来处理 MS Word(97-2003)对象,是 POI 中相对不太成熟的部分。但可以做一些基本的对于对 word 文档的读写操作。对于统计页数来说,HWPF 中 WordExtractor 的 SummaryInformation 提供了一个 getPageCount 的方法,但并不是特别的好用。下面我们先简单的介绍一下 HWPF 接口:

HSSF 提供给我们使用的对象在 org.apache.poi.hwpf.extractor 和 org.apache.poi.hwpf.usermodel 包中,主要部分包括 Word 对象,表格等。主要有以下几种对象:

WordExtractor 从 Word 文档中提取出文本的类。

Paragraph 对应于 Word 的一个段落范围。

Table 对应于 Word 的一个表格范围。

TableCell 对应于 Word 的一个表格的 cell 范围。

Range : 这个类是 HWPF 对象模型的核心类。适用于在 Word 文档中的字符的范围的所有属性扩展这个类。它可以插入文字或者选定一定范围的属性。

注:对于 HWPF 组件,经过我们的测试,发现其无法正确地读取 word 文件页数,所以我们使用 OpenOffice API 来替代这一部分。后面我们将会对这一部分进行详细地介绍。

时间: 2024-11-09 00:20:15

使用Apache POI和OpenOffice API获取微软Office系列文档的页数的相关文章

使用Apache POI和OpenOffice API在Linux中统计Office文档的页数

Apache POI 介绍 Apache POI 是一套用于访问微软 Office 格式文档 (Word, Excel and PowerPoint) 的 Java API.其中用于操作 Excel 格式文件的 API 是 HSSF,用于操作 Word 格式文件的 API 是 HWPF 以及用于操作 PowerPoint 格式文件的 API 是 HSLF. POI 的官方网站是 http://poi.apache.org,用户可以先从这里下载最新的版本 3.6, 下载解压后里面有三个 jar 包

Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便写下这篇博客心得 Google API:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#terms 其实大家要学习Android的技术,Google的API就是最详细的指导书了,而且通俗易懂,就算看不懂

asp.net-从SQL数据库中获取数据写入WORD文档,请附加代码,谢谢

问题描述 从SQL数据库中获取数据写入WORD文档,请附加代码,谢谢 基本格式:数据写入时需按一定格式(写入内容包含表格.文字.图片).标题居中等等 标题(含字体) 一.内容1 1.******* 2.***** 二.内容二 (1)***** 三.表格(或图片) 解决方案 c#里有一个非常不错的类库 叫aspose 里面可以操作word插入各种html以及表单以及图片. 非常不错 建议LZ搜索下 有很多相关代码,不想搜索你可以Call我 我发给你就是了 解决方案二: 在bai度中搜"java导出

azure-Rest API 列出Blob 代码或者文档都可以

问题描述 Rest API 列出Blob 代码或者文档都可以 最近需要用rest api去list Azure存储容器里的blob 有没有现成的代码文档可以让我参考参考 解决方案 Hi 关于Rest API的编写,首先我们找出Rest API的详细的说明文档,你可以在这个地址寻找:http://www.windowsazure.cn/zh-cn/develop/reference/,找到后我们只需要按照文档编写好一些请求的信息即可.需要特别注意的是每个请求都需要被验证,关于Azure存储服务验证

国产软件商撰文指微软OOXML修改文档仍不成熟

国产Office厂商永中科技总经理曹参就微软文档标准OOXML公开撰文,其中开篇写道:"经过针对性研究,我们认为OOXML格式并非成熟的开放标准,且对微软开放标准的态度质疑".并表示再次反对OOXML成为国际标准. 这也是继微软公开其文档格式标准OOXML近2000页修改文档后,首家Office软件厂商在研究后首次做出公开回应. 按照计划,国际标准组织ISO计划于今年2月底再次开会讨论微软文档标准OOXML是否可以成为国际标准.在 2007年9月的投票中,OOXML未获得足够支持而暂时

借用OpenOffice将上传的Word文档转换成Html格式

有个博友写的比较详细,参考地址:http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548331.html 将Word转Html的原理是这样的: 1.客户上传Word文档到服务器 2.服务器调用OpenOffice程序打开上传的Word文档 3.OpenOffice将Word文档另存为Html格式 4.Over 至此可见,这要求服务器端安装OpenOffice软件,其实也可以是MS Office,不过OpenOffice的优势是跨平台

【江湖救急帖】C# 获取不同version的文档的属性从SharePoint上

问题描述 各位大神,我最近遇到一个这样的问题,我可以通过Lists获取文档列表,我也可以下载每个不同的版本,但是目前有需求需要获取不同版本时,属性的集合.这个有没有固定的api或者webservice.请大侠帮忙-- 解决方案

开发API完成,写个文档

Jira对接Prism开发API指南   部门 证系统运维团队 文档制作人 陈刚() 时间 2017-04-05 版本 第一版     目录 目的... 1 通例:... 1 认证... 2 新建版本单... 2 获取指定版本单的发布单信息... 3     目的 为了提升工作效率,打通jira和prism之间的联系,让软件项目管理人员可以在jira上新建版本单,并跟踪发布进度,特在prism上制作相关API供jira调用.   通例: l  Prism的web址会因环境不同或构架变更而发生变更

java OpenOffice将上传的Word文档转换成Html格式

为什么会想起来将上传的word文档转换成html格式呢?设想,如果一个系统需要发布在页面的文章都是来自word文档,一般会执行下面的流程:使用word打开文档,Ctrl+A,进入发布文章页面,Ctrl+V.看起来也不麻烦,但是,如果文档中包含大量图片呢?尴尬的事是图片都需要重新上传吧? 如果可以将已经编写好的word文档上传到服务器就可以在相应页面进行展示,将会是一件非常惬意的事情,最起码信息发布人员会很开心.程序员可能就不会这么想了,?濉?/p> 将Word转Html的原理是这样的: 1.客户