http://www.chendd.cn/information/viewInformation/other/256.a

关于模板的实现是日常开发中最常用到的,也是最易于维护的一种功能实现,利用模板可以非常高效的去实现文档内容的布局显示级相关属性的设置,同时利用docx文件作为模板也非常方便的进行二次修改和变更,它的好处不再赘述。

通过运行一列示例发现docx4j的关于模板的实现至少有3-4中方式,模板有常用的jxel表达式的写法、Word自带书签的写法、《》中文括号包裹的写法、Word中开发工具-设计模式实现的写法等等,既然能够读取到文档中的各种内容,自己想如何解析都是可以的,本文(和后文中)均采用类似jxel表达式引擎的方式去深入实现。

给出两种案例去实现基于模板中的变量替换cao作,采用docx4j提供的变量替换的方式,分别是“请假条”和“收入证明”两种单纯变量替换的实现,这两个模板示例中只包括了纯变量替换和含有图片,至于模板中有表格或者动态图片后文会实现。

关于“请假条”案例的模板文件参考为:

上述含有多个变量的替换,参考代码实现为:

package cn.chendd.docx4j.examples;import java.io.File;import java.util.HashMap;import org.docx4j.Docx4J;import org.docx4j.openpackaging.packages.WordprocessingMLPackage;import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;/*** 收入证明模板示例*/public class IncomeTemplateTest {public static void main(String[] args) throws Exception {String templatePath = System.getProperty("user.dir") + "/template/收入证明_template.docx";String outPath = System.getProperty("user.dir") + "/template/out/收入证明.docx";WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(newjava.io.File(templatePath));MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();HashMap<String, String> mappings = new HashMap<String, String>();mappings.put("name", "马参军");mappings.put("years", "5");mappings.put("post", "攻城狮");mappings.put("money", "25,000.00");mappings.put("moneyChinese", "二万五年里");mappings.put("address", "天宫一号天宫一号天宫一号天宫一号");mappings.put("telephone", "188188188188");mappings.put("year", "2018");mappings.put("month", "09");mappings.put("date", "11");documentPart.variableReplace(mappings);Docx4J.save(wordMLPackage, new File(outPath));}}

代码运行效果图参考为:

关于“收入证明”案例的模板文件参考为:

其实这个案例跟上述一样,只不过以前工作中涉及到的Word报表曾经涉及到有盖章的实现,就特地想到收入证明这种单据,是需要企业盖公章的,也就是比上述的工资条的案例多了一个盖章的图片而已,别的不涉及,我想代码你们就不用看了,有请假条的可供参考,没有写不出来的吧。

上述案例中相关文件下载

请假条_template.docx

收入证明.docx

收入证明_template.docx

请假条.docx

转载于:https://my.oschina.net/haiyangyiba/blog/2246103

4、docx4j中模板的使用相关推荐

  1. 多个so中模板单例的多次实例化

    在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次! 这个单例是通过继承模板来实现的(暂时不 ...

  2. 关于 underscore 中模板引擎的应用示例

    //关于 underscore 中模板引擎的应用示例 <!doctype html> <html> <head> <meta charset="ut ...

  3. 75款响应式国外漂亮网站建设中模板(上线倒计时模板)

    一些关于国外漂亮网站建设中模板,希望大家能使用得上,大家喜欢就点个赞吧. 1. [网站开通中]黑夜飘雪背景响应式网页倒计时模板  大小:2.09 MB  下载地址:http://www.177347. ...

  4. dreamweaver后缀名_在Dreamweaver中,模板文档的扩展名为()。_学小易找答案

    [多选题]windows7的新功能包括(). (6.0分) [资料题]23日,销售西装500套,销售单价300元/套,价款总计150 000元,增值税25 500元,价款税款收存银行. [单选题]Wi ...

  5. C++中模板类的静态成员

    目录 C++中模板类的静态成员 为什么需要模板类的静态成员? 代码示例 C++中模板类的静态成员 为什么需要模板类的静态成员? 模板类的静态成员和普通类,普通函数的静态成员一样,我们想在函数调用后留些 ...

  6. 前端面试 vue生命周期钩子是如何实现的?理解vue中模板编译原理?

    生命周期钩子在内部会被vue维护成一个数组(vue 内部有一个方法mergeOption)和全局的生命周期合并最终转换成数组,当执行到具体流程时会执行钩子(发布订阅模式),callHook来实现调用. ...

  7. Vue中 模板template的四种写法

    <div id="app"><h1>我是直接写在构造器里的模板1</h1> </div><template id=" ...

  8. Spring+Velocity中模板路径的问题

    在Spring中使用Velocity进行视图渲染的时候需要注意一个路径的设置问题.Spring本身提供了一个用于对Velocity进行设置的类,我们做如下设置: <bean id="v ...

  9. 寻找GridView中模板列中的控件

    假如你在gridview中添加一个模板列,并 在模板列中存放了一个dropdownlist控件.那么,问题就是:你如何去操作这个dropdownlist控件???? //对于gridview控件:  ...

最新文章

  1. Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析
  2. 一起学WP7 XNA游戏开发(三.二 Sprite Texture Font)
  3. Ecos笔记--2014/5/3
  4. 业务id转密文短链的一种实现思路
  5. windows下apache+php+mysql 环境配置方法
  6. 【JS】逻辑运算符 非! 与 或||(处理对象时注意)
  7. C# 或Asp.Net 将excel表格导入数据库
  8. 微信小程序 【笔记003】小程序的事件处理
  9. mysql序列号生成_超详细的mysql数据库GTID介绍—概念、优缺点、原理、生命周期等
  10. mysql并发控制之MVCC
  11. 如​何​计​算​当​地​的​中​央​子​午​线​经​度
  12. c#string类型探讨
  13. 吴伯凡-认知方法论-消极数据的力量
  14. 基因重组- 冲刺计划
  15. js实现对数组每一项加1的三种方法
  16. CSMA/CD总线以太网和交换式以太网
  17. 这个微信小游戏我就坚持了五秒 好玩的休闲游戏推荐
  18. leetcode奇技淫巧-递归中途强制跳出
  19. 魅族便签,能否成为国内便签应用的No.1?
  20. 苹果x屏幕出现一条绿线_苹果iPad换屏幕出现售后问题解答

热门文章

  1. 关于今日制造的一些使用
  2. 毕业论文排版(二)-页面设置
  3. 项目和程序的敏捷里程碑标准
  4. 计算机开机键英语字母,电脑开机出现英文字母怎么办?
  5. 学计算机基础word题,大学计算机基础word练习题及详解答案
  6. 线程间通信的几种实现方式
  7. Learning Python 008 正则表达式-004 sub()方法
  8. 计算机的主要性能指标总结
  9. 符合互联互通5级甲等病理系统标本签收程序设计方案
  10. 脑科学实验-割裂脑研究