处理思路:

  1. 将word模板以xml格式另存一份,得到xml格式模板
  2. 在xml 文件中,使用freemark标签,替换一些自定义值
  3. 使用freemark 解析xml ,输出到.doc 文件
  4. 在处理的时候要把文件后缀改成.ftl格式
  5. 获得自定义内容的word文件

案列资源:

https://download.csdn.net/download/csdn_heliu/10881778

实际操作:

word模板:

另存为xml文件,修改后缀名为.ftl格式(ftl文件是使用freemark标签处理过的,已经替换自定义内容,用idea或者eclipse处理太卡了,在外面用编辑器处理的)

实际代码实现:

 public static void main(String[] args) {//定义一个集合存放的是学生信息List<Student> studentList = new ArrayList<>();//学生AStudent a = new Student();a.setName("学生A");a.setSex("男");a.setAge(18);a.setPhone("18856652121");a.setAddress("安徽省合肥市");studentList.add(a);//学生BStudent b = new Student();b.setName("学生B");b.setSex("女");b.setAge(80);b.setPhone("18856654444");b.setAddress("美国加州");studentList.add(b);//学生CStudent c = new Student();c.setName("学生C");c.setSex("女");c.setAge(19);c.setPhone("18856652121");c.setAddress("江苏浙江");studentList.add(c);//把学生信息放到map里Map<String, Object> params = new HashMap<>();params.put("studentList", studentList);//标题params.put("title", "高三(3)班");logger.info("params:{}", params);//生成自定义内容wordString resultFilePath = String.format("D:/edu/test_%s.doc", "高三(3)班");FreeMakerParser.process("templates/test.ftl", resultFilePath, params);}

解析xml输出到.doc文件中—生成word文档时使用的方法:

 /*** @Description 解析xml输出到.doc文件中—生成word文档时使用* @author HeLiu* @date 2018/12/27 17:07*/public static String process(String templateFilePath, String resultFilePath, Map param) {CONFIGURER.setDefaultEncoding("UTF-8");// 设置默认编码方式try {InputStream is = FreeMakerParser.class.getClassLoader().getResourceAsStream(templateFilePath);if (null == is) {logger.info(".............InputStream is null..........");}File targetFile = FileToolUtil.createNewFile(resultFilePath);Writer resultFileWriter = new OutputStreamWriter(new FileOutputStream(targetFile), "utf-8");Reader templateFileReader = new InputStreamReader(is, "utf-8");Template template = createTemplate(DEFAULT_TEMPLATE_EXPRESSION, templateFileReader);template.process(param, resultFileWriter);logger.info(".............freemark文件解析完成,生成word成功,文件路径:" + targetFile + "!..........");return resultFilePath;} catch (Exception e) {logger.error("freemark解析异常", e);return null;}}

创建文件方法:

 /*** @Description 创建新文件,有目录则先生成目录* @author HeLiu* @date 2018/12/27 17:17*/public static File createNewFile(String pathFileName) throws IOException {File outFile = new File(pathFileName);File parentFile = outFile.getParentFile();if (parentFile != null && !parentFile.exists()) {boolean ret = parentFile.mkdirs();//不存在则创建父目录logger.info("......创建 {},目录结果:{}", parentFile.getAbsolutePath(), ret);}if (!outFile.exists()) {outFile.createNewFile();}return outFile;}

xml文件修改思路:

这里用到了freemarker插值的方法—${title},

freemarker循环list使用方法—<#list studentList as bean>

${bean.object}

</#list>

具体freemarker标签使用方法可以自己详细查询一下

重复的版块可以用循环生成,在处理的时候要把多余的标签内容删除掉

下面是修改的地方部分代码:

//修改标题
<w:t>${title}</w:t>//修改表格生成内容
<#list studentList as bean><w:tr w:rsidR="00E5798D" w:rsidTr="00E5798D"><w:trPr><w:trHeight w:val="652"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="1746" w:type="dxa"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"w:rsidP="00E5798D"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>${bean.name}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1746" w:type="dxa"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"w:rsidP="00E5798D"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>${bean.sex}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1746" w:type="dxa"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"w:rsidP="00E5798D"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>${bean.age}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1747" w:type="dxa"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"w:rsidP="00E5798D"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>${bean.phone}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1747" w:type="dxa"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"w:rsidP="00E5798D"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>${bean.address}</w:t></w:r></w:p></w:tc></w:tr></#list>

pom依赖:

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency>

运行结果:在定义的路径下有个新生成的word文件

总结:利用freemarker标签修改xml文件的时候要细心,不能写错,不能删错标签,不然都会导致word文件生成失败。文件一定要修改为ftl格式。

Java根据word 模板,生成自定义内容的word 文件相关推荐

  1. java利用Freemarker模板生成docx格式的word文档(全过程)

    参考汇总: wordexport: JAVA生成并导出Word文档技术论证 java利用Freemarker模板生成docx格式的word文档(全过程) - 旁光 - 博客园 # 参考资料 - 其他项 ...

  2. java根据pdf模板生成指定格式的pdf文件

    java根据pdf模板生成指定格式的pdf文件 一.工具准备 事先得准备好Adobe Acrobat DC,这是一款专门编辑pdf的工具,小编已经给大家准备好了. 链接:https://pan.bai ...

  3. python excel word模板_Python将Excel数据插入Word模板生成详细内容文档

    最近在实际工作中遇到的一个情况是,每个月固定时间要报送一批文档,文档的内容相似,有固定的模板,我这么懒的人肯定要想一个一劳永逸的办法.下面把搜索发现的情况记录一下,以备以后需要. Python有个叫做 ...

  4. 【PHPWord】PHPWord 根据word模板生成的内容动态生成目录以及页码

    文章目录 一.需求分析 二.PHPWord 中模板页码的设置 三.模板内生成目录 四.总结 一.需求分析 在实际业务中,我们可能需要根据一些比较复杂的业务模板,生成对应的Word 文件. 本文将掌握: ...

  5. springboot结合Freemarker模板生成docx格式的word文档(附代码)

    首先参考的是这篇文章: java利用Freemarker模板生成docx格式的word文档(全过程) - 旁光 - 博客园参考:https://my.oschina.net/u/3737136/blo ...

  6. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  7. java手动/按模板生成word与excel

    目录 一.前言 二.生成word 1.使用Apache poi手动生成一个word (1)导入依赖 (2)手动生成一个包含表格的word 2.使用Apache poi 按模板生成一个简单的word ( ...

  8. java 根据word模板生成word文件

    Java可以使用Apache POI库来生成Word文件,并且也可以使用freemarker等模板引擎来实现根据Word模板生成Word文件的功能. 下面是一个简单的示例代码,可以帮助您快速入门. 模 ...

  9. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子

    [实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...

最新文章

  1. Linux学习总结(四十七)NFS服务配置 上篇
  2. VS2008文件操作出现问题
  3. 微型计算机普遍使用的编码是,微型计算机中普遍使用的字符编码是什么吗
  4. vs官方使用教程中文版与英文版
  5. 搭建Hexo博客(一)-创建Hexo环境
  6. SGU 252 Railway Communication(KM)
  7. python+jpype+linux出现内存溢出问题解决方案
  8. mc9.1编程教程入门_教程1-什么是编程?
  9. 随机森林(Random Forest)算法原理总结
  10. Mac Yapi 内网安装保姆级步骤
  11. Github大盘点:2021年最惊艳的38篇AI论文
  12. 学好算法,真的需要智商吗?
  13. background简写属性
  14. 13.6.1 PDF 偏执狂
  15. unturend服务器修改背包,未转变者如何修改背包容量 | 手游网游页游攻略大全
  16. 靶机Who Wants To Be King 1渗透记录
  17. 用ASP.NET创建网络相册
  18. SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法
  19. 通过优化提高网站转化率
  20. CSS3字体样式及高级特效

热门文章

  1. Expecting a string, date or number here, Expression ...Freemarker布尔值转换异常
  2. 苹果手机计算机怎么看之前的记录,苹果怎么查之前的通话记录吗(苹果手机怎么查通话录音内容)...
  3. 【PCB开源分享】STC8A8K64D4开发板
  4. logistic模型预测人口python_基于logistic回归stats模型的概率预测置信区间
  5. hc05与单片机连接图_lcd1602接线图_lcd1602与单片机连接图
  6. 麒麟Kylin-V10-arm64-操作系统永久修改分辨率——趟坑
  7. Ubuntu卸载软件相关命令
  8. mongodb 表结构导出,索引检查
  9. svn分支合并到主干可能出现异常信息
  10. 使用pyhive:连接hive(python3+)