怎么使用poi-tl操作word模板,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<!-- poi-tl jar -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.8.2</version>
</dependency>
在电脑E盘中建立word模板:“E:\templete.docx”
修改模板内容
标题:{{title}} 工单编号:{{workNo}} 发单日期:{{issueDate}} 列表数据:{{*list}}
/**
* 根据word模板生成word文档
* @param request
* @param response
*/
@RequestMapping(value = "expdoc")
public void expdoc(HttpServletRequest request, HttpServletResponse response){
try {
String tempFile="E:\\templete.docx";
XWPFTemplate template = XWPFTemplate.compile(tempFile).render(
new HashMap<String, Object>() {{
put("title", "Hi, poi-tl Word模板引擎");
put("workNo", "20200910-001");
put("issueDate", "2020年9月10日");
put("list", new NumbericRenderData(new ArrayList<TextRenderData>() {
{
//循环list进行赋值
for(String detail:list){
add(new TextRenderData(detail));
}
}
}));
}});
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=\""+"out_template.docx"+"\"");
OutputStream out = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
template.write(bos);
template.close();
bos.flush();
bos.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
在浏览器中输入请求地址:http://localhost:8080/expdoc ,浏览器自动下载word文档,文档名称为:out_template.docx
public class YdgdTemplete{
private String demand;//要求
private List<String> detailList;//列表数据
}
/**
* 根据word模板生成数据信息,返回文档访问地址
* @param request
* @param response
* @return 文档访问地址
* @throws Exception
*/
@RequestMapping("expdoc")
@ResponseBody
public BasePageData expdoc(HttpServletRequest request, HttpServletResponse response) throws Exception {
BasePageData data = new BasePageData();
try {
//获取根目录
String realPath = request.getSession().getServletContext().getRealPath("/");
//定义保存文档目录
String fileDir = "/fileData/doc/";
File saveFile = new File(realPath + fileDir);
if (!saveFile.exists()) {// 如果目录不存在
saveFile.mkdirs();// 创建文件夹
}
//生成word文档名称
String fileName = System.currentTimeMillis() + ".docx";
//保存的文件的路径信息
String docPath = realPath + fileDir + fileName;
//返回文档路径
String backPath= fileDir + fileName;
//封装数据
YdgdTemplete ydgdTemplete = new YdgdTemplete();
ydgdTemplete.setDemand("生成测试数据");
List<String> list = new ArrayList<>();
list.add("第1条记录");
list.add("第2条记录");
ydgdTemplete.setDetailList(list);
//根据模板生成word文档
Boolean falg = FileUtil.createdoc(docPath,ydgdTemplete);
//调用返回
if(falg){
data.setData(backPath);
data.setCode(WebResponseCode.APPSUCCESS);
data.setMsg("操作成功!");
}else{
data.setData(null);
data.setCode(WebResponseCode.APPFAIL);
data.setMsg("操作失败!");
}
return data;
} catch (Exception e) {
e.printStackTrace();
data.setCode(WebResponseCode.APPFAIL);
data.setMsg("操作异常!");
return data;
}
}
/**
* 根据word模板生成word文件
* @param docPath
* @param ydgdTemplete
* @return
*/
public static boolean createdoc(String docPath, YdgdTemplete ydgdTemplete){
try {
if(StringUtil.isBlank(docPath)){
return false;
}
//读取模板
File file = ResourceUtils.getFile("classpath:templates/ydgd_templete.docx");
XWPFTemplate template = XWPFTemplate.compile(file).render(
new HashMap<String, Object>(){{
//生成数据
put("demand", ydgdTemplete.getDemand());
//生成列表数据
put("detailList", new NumbericRenderData(new ArrayList<TextRenderData>() {
{
if(null!=ydgdTemplete.getDetailList() && ydgdTemplete.getDetailList().size()>0){
for(String detail:ydgdTemplete.getDetailList()){
add(new TextRenderData(detail));
}
}
}
}));
}});
FileOutputStream out = new FileOutputStream(docPath);
template.write(out);
out.flush();
out.close();
template.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
关于怎么使用poi-tl操作word模板问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3204029/blog/4557294