用Java生成word文档
用Java生成word文档
- 生成word思路
- 编辑好需要使用的word文档
- Java代码层编写
- 生成后的文档如下图
生成word思路
用WPS或者office编辑好word的样式,然后另存为word xml文档,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Docx。
编辑好需要使用的word文档
1、把需要注入的信息换成变量名称,比如公司名称用${data1}表示,全部替换后的格式如下图所示
2、替换完成后另存为word xml格式的文档,如下图
3、生成后更改xml后缀为ftl格式文件,如下图
Java代码层编写
1、引用到freemaker的jar包,以及这里还引用了冰蓝云的一个jar包(导入这个jar包是为了后续解决用WPS创建的文档部分手机不能兼容,出现很多格式的问题,使用office手机可以很好的兼容),在pom.xml配置文件中,添加依赖
<!-- freemarker jar --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><!-- spire.doc jar --><dependency><groupId> e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version></dependency>
2、创建生成动态文档帮助类
package com.mallplus.order.utils;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.Data;import java.io.*;
import java.util.Map;/*** @author * @date * @apiNote 生成动态文档帮助类*/
@Data
public class WordUtil {private Configuration configuration = null;/** 模板文件存放的目录*/private String baseDir;/** 模板文件名称*/private String templateFile;/** word生成的输出目录*/private String outputDir;public WordUtil(){configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");}/** <p>转换成word<br>*/public String createWord(Map<String,Object> dataMap){configuration.setClassForTemplateLoading(this.getClass(), "");//模板文件所在路径Template t = null;try {//得到模板文件configuration.setDirectoryForTemplateLoading(new File(baseDir));t = configuration.getTemplate(templateFile);} catch (IOException e) {e.printStackTrace();}// GwUtil.getFileNo(""); 调用生成随机数的方法File outFile = new File(outputDir+ GwUtil.getFileNo("") + ".docx"); //导出文件Writer out = null;try {out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));} catch (FileNotFoundException e1) {e1.printStackTrace();}try {t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件return outFile.getPath();} catch (TemplateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return "文档生成失败";}}
3、将ftl模板文件复制到项目的指定路径下,模拟数据进行测试
public static void main(String[] args) {// 调用word文档帮助类WordUtil wordUtil = new WordUtil();// 模板文件存放的目录wordUtil.setBaseDir("E:/ww");// 模板文件名称wordUtil.setTemplateFile("采购计划表模板.ftl");// word生成的输出目录wordUtil.setOutputDir("E:/image/");// 初始化数据mapMap<String,Object> dataMap = new HashMap<>();// 录入采购基本数据dataMap.put("data1", "XX公司");dataMap.put("data2", "XX项目");dataMap.put("data3", "2022.01.01");dataMap.put("data4", "采购部");dataMap.put("data5", "张三");dataMap.put("data6", "189XXXXXXX");dataMap.put("data7", "李四");dataMap.put("data8", "张主任");dataMap.put("data9", "王总");dataMap.put("data10", "王某");dataMap.put("data11", "王某");dataMap.put("data12", "张三");// 录入表格数据(3条数据循环三次)for (int i = 1; i <= 3; i++) {dataMap.put("dataName"+i, "笔记本电脑"+i);dataMap.put("dataBand"+i, "金山牌"+i);dataMap.put("model"+i, "JHHJ6"+i);dataMap.put("price"+i, 5000+i);dataMap.put("quantity"+i, 3+i);dataMap.put("total"+i, 15000+i);}//处理定价方式复选框dataMap.put("select", "☑境内采购" + "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" + "□境外采购");String oldPath = wordUtil.createWord(dataMap);if (oldPath.equals("操作失败")){System.out.println("操作失败");}//输出生成后的文件路径System.out.println(oldPath);}
如果是使用WPS创建的文档需要最后一步加上如下代码进行处理(防止文档在部分手机上不能兼容或者格式问题):
//转化后本质是doc(x)的word文档。Document document = new Document(oldPath);File file = new File(oldPath);// 判断有没有父路径,就是判断文件整个路径是否存在if (!file.getParentFile().exists()) {// 不存在就全部创建file.getParentFile().mkdirs();}//将本质是xml的文件转化为真正的doc(x)document.saveToFile(oldPath, FileFormat.Docx);
生成后的文档如下图
spire.doc 免费版的对word的内容量有限制(要求 Word 文档不超过 500 个段落,https://www.e-iceblue.cn/Introduce/Free-Spire-Doc-JAVA.html)
采购计划表word模板文档地址:https://download.csdn.net/download/weixin_49104405/85187627?spm=1001.2014.3001.5501
用Java生成word文档相关推荐
- [摘]用Java生成Word文档
开发中隔三叉五的就要用到Word,经常被搞得不胜其烦,不过这次找到了不少好例子,干脆将他们都摘了过来,内容如下: 1. poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这 ...
- 用java生成word文档(转载)
用java生成word文档 poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这里提供了更加简单的一个接口给你: 下载经过封装后的poi包: 这个包就是:tm-extrac ...
- Java 生成Word文档 — 简单示例
前言 这篇文章将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中生成Word文档,插入文本,并设置段落的字体格式.对齐方式以及段后间距等. Fr ...
- java生成word文档freemarker
java freemarker + word 模板 生成 word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的替换) 1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下 ...
- Java生成Word文档
在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...
- java生成word文档(最简单)
首先说明,使用该方法时,尽量不要使用wps新建word文档,经测试,手机不能兼容,出现很多格式问题,office则手机可以很好的兼容,所以,本文以office做教程 1 首先新建一个word文档,然后 ...
- 记录一次用Java生成word文档的经验
业务背景 最近接到一个需求需要将学员的基本信息生成word格式的内容,word的格式如下图所示 开发的任务就是将学员的信息替换掉表格中的** 即可,感觉还蛮简单的. 相信大家以前做的最多的是Java和 ...
- java word模板poi生成文件_poi读写word模板 / java生成word文档
有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 下载包链接:点击进入 从数据库读取记录替换上述变量 import java.io.FileOutputStream; impor ...
- java生成word文档_Java多种方式动态生成doc文档
本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在Android上做到完美,最后还是只能搬迁到服务器.不浪费,还是记录下各框架不支持Android的原因以及他们的特点. ...
- java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区
生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...
最新文章
- 8种最坑的SQL错误用法,第一个就很坑?
- 安装惠普笔记本XP三种方法
- KMP 算法并非字符串查找的优化 [转]
- Hangfire使用ApplicationInsigts监控
- 【汇编语言】(王爽)实验4解答
- 从XMLHttpRequest中获取请求的URL
- 三维点云学习(4)3-Model Fitting Least Square
- wps打开pdf乱码_wps pdf转换成word乱码
- SWMM[Storm Water Management Model]模型代码编译调试环境设置
- js调用qq互联api实现第三方登录
- 浅聊一下车载以太网技术及其EAVB和TSN技术
- 牛逼的 弹出层 layer !!!
- 连接mysql数据库error 2003_连接mysql数据库error 2003
- 大型机汇编HLASM - HOOK ISPF命令START(一)
- 微商必备6款软件!十分好用
- WPF LiveCharts 折线图XY轴关联赋值,可显示不同时间段数据
- 工具 | 百度网盘限速解决方案
- Python3.4 调用语音及警报声
- 2021中青杯数学建模A题思路详细分析 代码?
- php 不重复订单号,php如何生成不重复的订单号,php不重复订单编号
热门文章
- c语言编黑白棋的思路,黑白棋的问题。。555。。头发都掉了。。。
- 一、super slomo介绍
- Android同步时出错,Android Studio中的Gradle给出错误项目同步失败
- html中代表颜色的字母16个,html中16进制的代码对应颜色表
- 小学生信息奥赛学c语言,适合小学生的信息学奥赛(NOIP)课程来袭!
- x32下PsSetLoadImageNotifyRoutine的逆向
- mysql id 主键 外键_mysql主键 外键
- 本征频率有时也称为特征频率,固有频率,本振频率
- Redis官方中文翻译系列 - Redis文档
- arcgis公里坐标转经纬度_利用arcgis实现经纬度和平面坐标互转