当使用java代码生成word文档,要进行一些复杂的排版操作时比较困难,这时可以通过模板引擎(如 freemarker、velocity等)来生成想要的word文档。
步骤:
1.先准备好word文档模板,进行排版等操作,在需要替换填写变量字符,然后保存为xml格式。
例如在word中写入以下信息
2.另存为xml格式(个人使用时都是保存为2003的xml,最好别用wps,生成的xml可能会有些出入)
3.打开xml,找到需要替换的变量,用模板引擎定义的变量格式替换。我使用的是velocity,所以将var替换为${var}。
4.然后将文件后缀改为模板引擎能识别文件,velocity使用的模板后缀为.vm,所以我将文件保存为test.vm
5.接下来的操作就是使用模板引擎将变量替换,输出文件时将文件后缀改回.doc就行了。
以上是生成简单文档的做法-----------------------------------------------------------------------------------
有时添加某些特殊元素,如:表格、图片、分页。我们可以根据word生成xml进行改造,利用模板引擎生成想要元素
-图片:在xml中图片元素为<w:pict>,找到该元素的位置,根据模板引擎的语法进行改写
word中图片使用base64编码,将图片的base64编码填写入<w:binData>元素的位置就能显示图片了;
-表格:先编辑一个表格,再在xml中拷贝表格中的一行,进行输入数据的行数循环输出就行
-分页:将生成的word xml数据放入数组中,在页与页之间用word的分页符间隔即可。(注意:以下变量$pageContent的内容应当是word xml里<wx:sect>文档体元素中包含的数据,其中还要排除<w:sectPr>尾部信息元素的数据)
Word的xml中相关定义:
<w:br w:type="page"/> 分页符号
<w:pict>图片资源
<wx:sect> 文档体
<w:sectPr> 尾部信息
</w:tbl>表格
<w:tr>表格行
分页符(这是我自己在xml截取出的,你们可以自己保存一个多页的文档,在xml里找到它的分页符并使用它)
<w:p wsp:rsidR="001E05E9"wsp:rsidRDefault="001E05E9">
<w:pPr>
<w:widowControl/>
<w:jc w:val="left"/>
</w:pPr>
<w:r>
<w:br w:type="page"/>
</w:r>
</w:p>
换页符:(有时在表格后添加不起作用)
<w:br w:type="page"/>