主要用于生成特定word文档,需要替换docx中的文字,书签,图片,动态表格等

本文以生成docx为例,doc文件目前有一些问题 例如图片或模板不好处理等,暂不考虑。

思路:

1)熟悉docx文件的结构

2)重新生成docx中的文件

3)替换docx中的文件

一、引入依赖

pom.xml 引入相关jar包

1.freemarker-2.3.28:处理xml或ftl模板的jar

2.hutool-all-5.5.7:主要一些工具类的jar

3.dom4j-1.6.1:XML解析使用的jar

4.aspose-words-15.8.0-jdk16:对word操作的jar,例如word转pdf,word书签操作

二、构造参数

1.针对生成的word文档中需要的数据构造对象与属性

例如以下word模板

开发人员根据具体模板构造参数,不过多介绍

2.代码书写

需要准备内容:模板目录,生成word文档目录,相关模板文件名称

例如:

document.xml.rels:实际上为xml文件,指定相关资源与图片地址的文件

document.xml:word文档内容文件

freemarker_template.docx:word模板文件

3.执行顺序

1)通过dom4j进行xml解析 重新生成document.xml.rels

2)通过Freemarker进行模板处理重新生成document.xml

3)通过java自带zip操作替换word模板中的document.xml.rels,document.xml,写入相应图片,并且重新压缩生成新的word文档

4)删除临时文件:上述过程会产生一些临时文件,操作完成后需要及时删除

三、准备模板

docx文件实际是压缩文件,将word模板docx用压缩程序打开,如下:

将word目录中的document.xml文件,word/_rels/document.xml.rels文件拷贝出来,可以用HBuildX进行编辑,HBuildX可以对xml文件进行格式化。

document.xml.rels:

一般删除该文件中引入的图片标签即可

document.xml:

该word文档内容文件,需要开发人员自己编辑其内容 通过${}指定对应参数,这里使用的是Freemarker的语法格式

一般语法:

!'' 表示为空时为'',以下都做了非空判断,不然程序执行时会报错

${myName!''}${(user.userName)!''}<#if ((user.type)!'')=='admin'>${(user.userName)!''}
</#if><#if userList??><#list userList as user>${(user.userName)!''}</#list>
</#if>

freemarker_template.docx:

这个文件是word模板文件,需要处理的是用压缩软件打开该文件后删除其中的图片,目录地址位于word/media/下,还需要处理的文件是[Content_Types].xml

一般添加以下内容即可(不添加时可能会提示错误):

<Default Extension="png" ContentType="image/png"/><Default Extension="jpg" ContentType="image/jpg"/><Default Extension="jpeg" ContentType="image/jpeg"/>

四、开始测试

具体测试请看demo

freemarker-demo: freemarker 制作word文档docx案例

freemarker 制作word文档docx案例相关推荐

  1. Java通过POI或Freemarker生成word文档,使用Jfreechart创建统计图表

    最近做了一个使用Java生成统计分析报告word文档的功能,有提前制作好的word文档,其中共包含了普通文本变量,普通表格,动态表格.统计图表(柱状图.饼状图.折线图等),在此记录下POI和freem ...

  2. Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list

    1. 准备环境 1.1 word版本:MacOS系统下的Office360 word for Mac下好多操作和win的不一样啊啊啊,差点栽在Mac word的模版设计上. win版本的word模版设 ...

  3. freemarker实现word文档模板动态生成

    携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情 1.写在前面 很多时候,我们可能需要根据一个word模板,动态生成,我们所需要得一个word文档. 那这 ...

  4. 使用FreeMarker给word文档里生成柱状图

    学习目标: 使用FreeMarker给word文档里生成柱状图 1制作ftl文件: 1.先创建个空白的word文档 然后插入柱状图 2.另存为xml文件 打开后是这样 3.百度搜索 XML 在线格式化 ...

  5. python新建word文档_python_docx制作word文档

    一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

  6. python_docx制作word文档

    python_docx制作word文档 一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档 ...

  7. spring使用freemarker生成word文档包含表格、图片(循环插入)

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  8. freemarker导出Word文档并在其中插入图片

    先将word转成xml格式,再用notepad将其转为ftl格式(将要填入数据的地方加个占位符,${name}) import java.io.File; import java.io.FileInp ...

  9. 用freemarker生成word文档,并插入图片

    用freemarker生成word文档,并插入图片 最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中. 创建word模板 新建一个word文档 ...

最新文章

  1. springboot-mysql-email集成
  2. node.js 多异步之间的协作方案
  3. EF 4.1中内部经常提交的 exec sp_reset_connection 的用途原来是为了重用池中的连接...
  4. spring jdbctemplate源码跟踪
  5. jquery不同版本冲突导致低版本功能不能用
  6. jeecg公开课今晚主题:新版本功能介绍、online原理和代码生成器,欢迎大家报名
  7. .net IntPtr ==interoperable pointer
  8. bigdecimal除法保留4位小数_小猿圈分享-MySQL保留几位小数的4种方法
  9. K8s CKS认证学习全套笔记
  10. liunx 系统下面安装jdk
  11. OLT忘记登陆密码如何修改
  12. Intel CPU平台和架构介绍
  13. 安卓源码目录最全解析
  14. 100句永久珍藏的人生格言
  15. 网易测试工程师笔经面经(已上岸)
  16. 微信小程序开发之获取用户信息
  17. XP SP2激活总集
  18. Oval验证框架学习
  19. 阿里二面: 说一下从url输入到返回请求的过程
  20. 外部PLC触发VisionMaster多流程运行

热门文章

  1. (内容提供者)备份短信和添加短信
  2. flutter 隐藏返回按钮 自定义返回按钮
  3. oracle hint 谓词推进,oracle常见hint
  4. 安卓手机tiktok怎么下载_安卓手机清理大师下载安装-安卓手机清理大师官方下载v1.0.0 最新版...
  5. 计算机桌面空间,不占桌面空间的电脑底座!说不定你需要用到它
  6. C语言 猜凶手及类似题目
  7. Java字符集编码解码详细介绍
  8. 超级简单的EOS代币转账教程(EETH)
  9. 常用的几种Hints优化一条SQL
  10. excel 批量打印word、excel所有sheet 的 vba代码