随笔-34  评论-33  文章-0  trackbacks-0

    docx4j是一款在java世界处理微软word/ppt/excel文档的强大工具。它其实是一个半开源的产品。虽然它对WORD各种处理在API层 面进行了封装,但是像WORD本身的拆分,合并。其作者(Jason Harrop)是单独提出来了,封装成了商用的JAR包来提供支持。而我在深入学习其API之后,先后将组合,拆分技术进行了实现。

    docx4j用到了个比较N的技术--JAXB.它建立了XML文件与JAVA对象互相转换的一个桥梁。

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XMLSchema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法, 并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java 开发者在Java应用程序中能方便地结合XML数据和处理函数。

WORD以XML存储的原理:

WordprocessingML体系结构图


WordML以XML的格式定义了文档中各个部分的属性,如页眉,页脚,图片,样式。每一种资源都其实是使用一个XML的结点来描述。举例来说明:

假如有这样一个文档

docx4j可以将WORD直接转换其对应的XML文档,我们可以以第一段【开始】到【题文】那一段的XML片断来说明。初步看,这段内容包含了若干文字,一张图片。

文字段:

图片:

图片的关联资源引用定义:

图片资源的数据定义:

看到NB的地方没有,使用binarydata存储这个图片的数据。


组合原理:


拆分原理:

原理基本如上,已经在项目中实际应用。有了这层API,你可以通过程序去生成一份试卷(类似学科网的组卷功能),或者把试卷拆分成单个的试题入库。如有不明白的,欢迎沟通学习。

之前生成的试卷sample:主要在基础API之上,封装了生成一份试卷常用的方法。其实就是内容的样式设置及WORD组合。




我的微信公众号,欢迎沟通学习。
posted on 2016-03-14 16:10 alexcai 阅读(3317) 评论(2)  编辑  收藏

评论:
# re: 利用docx4j来处理word的合并与拆分[未登录] 2016-03-18 06:54 | xin
ooxml太繁琐,docx4j在word层面做的不错可惜更新太慢bug还是一堆。对于更精细的控制,为了保持稳定性,更推荐直接用COM调微软API(server只能是windows而且有时很脑残)
或者期待下POI把word和ppt部分搞出来。
反正对于复杂模型下的office文件生成,只有微软自己的API最靠谱。(鄙视微软)  回复  更多评论
  
# re: 利用docx4j来处理word的合并与拆分 2016-03-18 09:25 | zuxiong
@xin
其实在这之前,我用JACOB 进行同样功能的封装,已经实现上上述功能。只在它是基于VBA的,在资源的处理层面,比如WORD的COPY,它是共享的。注定一台机器同一时间只能处理一组WORD的拆分与合并处理。不能并行。所以后来才考虑使用DOCX4J。
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: