近期要考虑构建一个支持openDocument的文档结构,就像ms-office的07+,是为了能在linux服务器上可自动生成支持office07的文档简报。以前每次都是根本模板纯手工去制作基于两种xml格式的office,以至于对xml的规范跟schema被熟练,但java对xpath的不完美支持完美的体现在了这类xml中,所以只能手工去写工具函数予以支持,但读写起来还是很不爽!
大家都知道它的openDocument结构,一直想着会有开源的分析、工具支持等等,不一定有for java我也能接受,一直没时间去寻找,找着了
http://www.ibm.com/developerworks/cn/lotus/symphony-odfdom-pt2/index.html这篇文章,对ODF的定制概念有了一定的了解,代码示例在第三部分,此文仅记录对这方面的思路,有备无患。
本人整理的参考资料来自
分类 http://swik.net/office+Java
simple~code-base https://hg.odftoolkit.org/hg/simple~code-base
Simple Java API for ODF http://simple.odftoolkit.org/downloads.html
The Apache Xerces Project http://xerces.apache.org/mirrors.cgi
首先,我们简要描述一下 ODF 文档结构。ODF 文档保存在一个 ZIP 压缩包中,它包含 content.xml、style.xml 及其他若干文档。
Content.xml 用来保存文档内容,style.xml 用来保存文档样式信息。content.xml 文件也含有一些样式信息,可以用来自动创建一些默认值,如字体和颜色。
一般来说,操作一个 ODF 文档分四步:
- 加载已有 ODF 文档或创建 ODF 文档。
- 向 ODF 文档插入内容。
- 为信息的不同部分设置样式。
- 保存文档。
ODFDOM 现在提供一些 API,借助它们,可以轻松完成这四步主要操作。
在本小节中,我们将演示一个简单用例:读取一个 XML 文件并输出到 ODF 文档。
作为文本文件,content.xml 层级如下(见清单 1):
- 第一个元素是 <office:body>,它是文档根目录的子元素。
- 下一级是 <office:text> 元素,它表示所有要保存在输出文档中的文档元素。
- 在 <office:body> 之前的 <office:automatic-styles> 是文档根目录的另一个子元素,用于保存元素的各种样式信息。
<office:document-content> <office:automatic-style/> <office:body> <office:text/> </office:body> </ office:document-content> |
此处,<office:style> 和 <office:automatic-styles> 都定义了一些样式,但有些区别。<office:style> 通常用来定义常用样式。一般通过设置样式名称来应用 <office:style> 中定义的样式。从 ODF 编辑器的角度来看,<office:style> 中定义的样式是由用户定义的一组特征值。
另一方面,<office:automatic-styles> 中定义的样式包含一些特别的样式属性。从 ODF 编辑器的角度看,它用于编辑对象的某些属性。
ODFDOM 提供对象来表示各种文档的 ODF 包:
- OdfTextDocument textDocument:对应于一个文本文件(odt)对象。
- OdfFileDom contentDom:对应于 content.xml 的 XML 文档对象。
- OdfFileDom stylesDom:对应于 styles.xml 的 XML 文档对象。
文本文件对象可以使用 API 来获取内容对象(content.xml)和样式对象(styles.xml):
- OdfFileDom contentDom = textDocument.getContentDom()
- OdfFileDom stylesDom = textDocument.getStylesDom()
ODFDOM 还提供多个对象来表示各种内容和样式元素:
- OdfOfficeAutomaticStyles contentAutoStyles:对应 content.xml 中 <office:automatic-styles>。
- OdfOfficeStyles stylesOfficeStyles:对应 styles.xml 中 <office:styles>。
- OdfOfficeText officeText:对应 content.xml 中 <office:text>。
用 ODFDOM API 获取内容元素对象和文本元素对象也很容易:
- OdfOfficeAutomaticStyles autoStyles = textDocument.getContentDom (). GetAutomaticStyles ()
- OdfOfficeStyles styles = textDocument.getDocumentStyles ();
- OdfOfficeText text = (OfficeText) textDocument.getContentRoot ();
ODFDOM 还提供一个 API 来对 ODF 文档进行文件级操作,例如ÿ