Vorwort
Es besteht die Anforderung, dass bei einer korrekt formatierten Word-Dokumentvorlage Daten geschrieben und durch dynamische Zuweisung ein Word-Dokument im Vorlagenformat neu generiert werden muss. Dies ist offensichtlich ganz einfach mit Java+Freemarker zu implementieren.
1. Abhängigkeiten importieren
<!-- freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
2. Speichern Sie die Vorlage
(1) Bereiten Sie ein korrekt formatiertes Word-Dokument vor (Testdokument – original.docx).
(2) Speichern Sie es als XML-Datei (Testdokument - original.xml)
(3) Suchen Sie einfach ein Online-XML-Formatierungstool, um es zu verarbeiten (Testdokument – Original [Formatierung].xml)
(4) Speichern Sie die XML-Vorlage im Verzeichnis /src/main/resources/templates/freemaker/
(5) Verwenden Sie EL-Ausdrücke, um Vorlagen Werte zuzuweisen
3. XML zu Doc/Docx
(1)/src/main/java/org/example/test/Main.java
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class ConvertXmlToDoc {
/**
* Xml 转 Doc
*/
private static void tranform() {
Map<String, Object> map = new HashMap<>();
map.put("question_1","一加一等于几");
map.put("answer_1","二");
map.put("question_2","什么叫余弦定理");
map.put("answer_2","余弦定理,欧氏平面几何学基本定理。余弦定理是描述三角形中三边长度与一个角的余弦值关系的数学定理,是勾股定理在一般三角形情形下的推广,勾股定理是余弦定理的特例。");
try {
Configuration configuration = new Configuration(Configuration.VERSION_2_3_20);
configuration.setClassForTemplateLoading(ConvertXmlToDoc.class, "/templates/freemaker"); // 指定 xml 模板存放的位置,即:项目目录/src/main/resources/templates/freemaker
// 获取 xml 模板
Template template = configuration.getTemplate("测试文档 - 原版【格式化】.xml");
// 输出 doc/docx 文件
File outFile = new File("D:/" + "测试文档 - 修订版【重制版】" + ".docx");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
template.process(map, out);
System.out.println("转换成功");
} catch (Exception e) {
System.out.println("转换失败");
e.printStackTrace();
}
}
public static void main(String[] args) {
tranform();
}
}