在Java中,根据模板导出Word文档通常涉及到使用某种库或框架来处理Word文件的格式和内容。Apache POI是一个流行的选择,它提供了一套完整的API来读写Microsoft Office文档,包括Word(.doc和.docx格式)。
文章目录
java根据模板导出word
- 提高效率和准确性:
通过使用模板,可以预先定义好Word文档的结构、样式和格式。在需要生成文档时,只需填充模板中的占位符或变量即可,大大减少了手动编辑文档的时间和出错率。 - 实现自动化和批量化处理:
在很多业务场景中,需要生成大量格式相同的Word文档,如报告、合同、发票等。通过Java代码根据模板自动导出文档,可以实现这些任务的自动化和批量化处理,提高工作效率。 - 增强灵活性和可定制性:
使用模板并不意味着文档的内容是固定的。相反,通过Java代码可以动态地修改模板中的内容,如添加、删除或替换文本、图片、表格等。这使得生成的文档具有很高的灵活性和可定制性。 - 保证文档的一致性和规范性:
通过模板导出的Word文档可以保持一致的风格和格式,避免了因手动编辑而导致的格式混乱或不一致的问题。这对于维护企业形象、提升文档的专业性具有重要意义。 - 便于集成和扩展:
Java作为一种强大的编程语言,具有丰富的库和工具支持。使用Java根据模板导出Word文档可以方便地与其他系统进行集成,如从数据库获取数据、调用Web服务等。同时,也可以根据需要扩展功能,如添加水印、加密保护等。 - 降低成本:
通过自动化和批量化处理,可以减少对人力资源的依赖,降低企业的人力成本。同时,使用模板也可以减少因购买或定制专业文档生成软件而产生的费用。
1. 制作word模版
1.1. 模版编写 内容替换
目标下面模版进行多页展示
1.2. 将word转换成xml
1.3. 将xml格式化 再将xml改成ftl
1.4. list找到起始位置和结束位置
起始位置插入<#list list as l>
结束位置插入</#list>
2.java代码
2.1. 引入pom
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
2.2. ExportWordFtl.java
package com.liuhm.utils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.junit.platform.commons.util.StringUtils;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* @ClassName:ExportWordFtl
* @Description: TODO
* @Author: liuhaomin
* @Date: 2023/7/21 16:02
*/
public class ExportWordFtl {
/**
* 生成word文件
* @param dataMap word中需要展示的动态数据,用map集合来保存
* @param templateName word模板名称,例如:test.ftl
* @param filePath 文件生成的目标路径,例如:D:/wordFile/
* @param fileName 生成的文件名称,例如:test.doc
*/
@SuppressWarnings("unchecked")
public static File createWord(Map dataMap, String templateName, String filePath, String fileName){
try {
//创建配置实例
Configuration configuration = new Configuration();
//设置编码
configuration.setDefaultEncoding("UTF-8");
//ftl模板文件
configuration.setClassForTemplateLoading(ExportWordFtl.class,"/");
//获取模板
Template template = configuration.getTemplate(templateName);
//输出文件
File outFile ;
if(StringUtils.isBlank(filePath)){
outFile = new File(fileName);
}else {
outFile = new File(filePath+ File.separator+fileName);
//如果输出目标文件夹不存在,则创建
if (!outFile.getParentFile().exists()){
outFile.getParentFile().mkdirs();
}
}
//将模板和数据模型合并生成文件
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
//生成文件
template.process(dataMap, out);
//关闭流
out.flush();
out.close();
return outFile;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
Map<String, Object> map = new HashMap<>();
map.put("datasubmit_updated_time","2023-07-02 12:12:12");
Date date = new Date();
map.put("nyliq",date);
map.put("yhorq","单位名称"+i);
map.put("xiikv","隐患类型"+i);
map.put("kuzjg","隐患整改通知书类型"+i);
map.put("hnvld","隐患详情"+i);
map.put("gnbcv",date);
map.put("malio",date);
map.put("skpfm","整改情况告知书编号"+i);
map.put("vgnje","整改状态"+i);
map.put("vutap","备注"+i);
list.add(map);
}
Map<String,Object> dataMap = new HashMap<String, Object>();
dataMap.put("list", list);
try {
String path = "C:\\Users\\Administrator\\Desktop\\";
// path = URLDecoder.decode(Test.class.getClassLoader().getResource("").getPath(), "UTF8");
File file = ExportWordFtl.createWord(dataMap, "template/demo.ftl", path, "demo-t.doc");
System.out.println("文档生成成功,路径为" + file.getAbsolutePath() );
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.3. 测试
执行main方法
生成文件
所有的文件格式正确
模版里面的参数 修改 防止字段为空或者字段不存在 如
${l.jfwor?string('yyyy-MM-dd')} 改成${(l.jfwor?string('yyyy-MM-dd'))!}
${l.jfwor} 改成${(l.jfwor)!}
下面的export-template-word