Freemarker生成word实战:Java实现动态文档创建

版权申诉
0 下载量 76 浏览量 更新于2024-08-19 收藏 1.15MB PDF 举报
"这篇文档主要介绍了如何使用Java和FreeMarker模板引擎来动态生成Word文档,适用于需要根据模板填充数据的场景。" FreeMarker是一个强大的、轻量级的模板引擎,常用于生成HTML、XML或其他文本格式的文件。在这个场景中,FreeMarker被用来生成Word文档。以下是使用FreeMarker生成Word文档的详细步骤和关键知识点: 1. 模板准备:首先,你需要一个Word模板,这个模板包含了静态内容和需要动态替换的部分。在模板中,对需要替换的数据打上特定的标记,例如用"X"或自定义的占位符。 2. 模板转XML:将Word模板另存为XML文件,这使得我们可以更容易地操作文档结构。打开XML文件,确保文件编码为UTF-8,并找到之前设置的标记,将其替换为FreeMarker的表达式,如 `${username}` 和 `${date}`。 3. 处理表格数据:对于表格中的数据,由于XML能保留表格结构,我们可以找到表格的开始和结束标记,然后替换每个字段的数据。在表格开头和结尾处添加FreeMarker的循环指令,如 `#foreach` 和 `#end`,用于遍历和插入动态数据。 4. 编写Java代码:引入FreeMarker的库,包括 `Configuration`、`Template` 和 `TemplateException` 等类。创建配置对象,加载XML模板文件,然后创建一个数据模型,该模型包含将要填充到模板中的变量。使用 `Template` 类的 `process` 方法将数据模型与模板结合,生成最终的Word文档。 以下是一个简单的Java代码示例: ```java import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.*; public class WordGenerator { public static void main(String[] args) { // 创建FreeMarker配置 Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setDirectoryForTemplateLoading(new File("path/to/templates")); // 加载模板 try (FileReader reader = new FileReader("test2.xml")) { Template template = cfg.getTemplate(reader); // 创建数据模型 Map<String, Object> dataModel = new HashMap<>(); dataModel.put("username", "张三"); dataModel.put("date", new Date()); // 输出到Word文件 File output = new File("output.docx"); try (OutputStream outputStream = new FileOutputStream(output); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"))) { template.process(dataModel, writer); } catch (IOException | TemplateException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } } ``` 这段代码加载XML模板,创建数据模型,然后将模板和数据模型结合,生成一个名为 `output.docx` 的Word文件。 5. 运行和验证:运行Java程序后,检查生成的Word文档,确认动态数据已正确填充到模板中。 通过这种方式,你可以利用FreeMarker的强大功能,根据需求动态生成个性化的Word文档,尤其适用于批量生成报告、合同等文档的场景。记得在实际应用中,根据项目需求调整代码,确保模板和数据模型的对应关系正确无误。