依赖
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
代码
public void downloadDocx(HttpServletResponse response) {
try (
InputStream ins = Files.newInputStream(Paths.get(docxPath));
OutputStream out = response.getOutputStream()
) {
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);
IContext context = report.createContext();
Map<String, Object> map = context.getContextMap();
map.put("name","张三");
map.put("salary",1500)
Person persion1 = new Person();
persion1.setName("张三");
persion1.setSalary(1500);
Person persion2 = new Person();
persion2.setName("李四");
persion2.setSalary(2000);
List<Person> list = new ArrayList<>();
list.add(persion1);
list.add(persion2);
map.put("person",list);
FieldsMetadata fm = report.createFieldsMetadata();
fm.load("person", Person.class, true);
report.setFieldsMetadata(fm);
String fileName = "result.docx";
response.setCharacterEncoding(UTF_8);
response.setContentType("application/msword");
response.addHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(fileName, UTF_8))));
report.process(context, out);
} catch (Exception e) {
e.printStackTrace();
}
}
Word
![](https://img-blog.csdnimg.cn/img_convert/7215227ce5ac48bca120a2fc689a481a.png)
![](https://img-blog.csdnimg.cn/img_convert/f3e235d2298d429a8ca0066ba275c77f.png)
![](https://img-blog.csdnimg.cn/img_convert/6ad769b268e4491eb1b551d9cdc16956.png)
![](https://img-blog.csdnimg.cn/img_convert/89a89b704b074f40a34a95f6c1355709.png)
结果
![](https://img-blog.csdnimg.cn/img_convert/5b28fac23a5d4fc586e1a6f643789023.png)
参考 https://blog.csdn.net/qq_55656404/article/details/125434007