目录
1、pom.xml
<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.template</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.freemarker</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2、代码demo
package org.demo.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
@RestController
public class demo{
@RequestMapping(value = "/export")
public ModelAndView export(HttpServletRequest request, HttpServletResponse response) {
//数据处理
Map<String, Object> paramMap = new HashMap<String, Object>();
String title = "测试";
paramMap.put("title", title);
OutputStream ouputStream = null;
try {
String templatePath = "存放模板文件绝对路径/demo_word.docx";
InputStream ins = new FileInputStream(new File(templatePath));
//注册xdocreport实例并加载FreeMarker模板引擎
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);
//创建xdocreport上下文对象
IContext context = report.createContext();
context.put("parammap", paramMap);
//输出到本地目录
String filename = "degreeStudent.docx";
ouputStream = response.getOutputStream();
report.process(context, ouputStream);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (ouputStream != null) {
ouputStream.close();
}
} catch (IOException e) {
}
}
return null;
}
}
3、参考资料
1、基于xdocreport导出复杂word文档,专业避坑指南【亲测有效】
https://blog.youkuaiyun.com/lzh_java_demo/article/details/121122932
2、Java导出Word文档的实现
https://blog.youkuaiyun.com/plxddyxnmd/article/details/109129838?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-109129838-blog-119707628.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-109129838-blog-119707628.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=1