怎么使用poi-tl操作word模板

怎么使用poi-tl操作word模板,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

站在用户的角度思考问题,与客户深入沟通,找到关岭网站设计与关岭网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站建设、企业官网、英文网站、手机端网站、网站推广、申请域名、网页空间、企业邮箱。业务覆盖关岭地区。

使用poi-tl操作word模板

1.导入jar包支持



	com.deepoove
	poi-tl
	1.8.2

2.建立word模板

  1. 在电脑E盘中建立word模板:“E:\templete.docx”

  2. 修改模板内容

标题:{{title}}
工单编号:{{workNo}}
发单日期:{{issueDate}}
列表数据:{{*list}}

3.生成代码方法

/**
 * 根据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() {{
					put("title", "Hi, poi-tl Word模板引擎");
					put("workNo", "20200910-001");
					put("issueDate", "2020年9月10日");
					put("list", new NumbericRenderData(new ArrayList() {
						{
						   //循环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();
	}
}

4.请求访问

在浏览器中输入请求地址:http://localhost:8080/expdoc ,浏览器自动下载word文档,文档名称为:out_template.docx

5.数据封装

5.1关联实体

public class YdgdTemplete{
  private String demand;//要求
  private List detailList;//列表数据
}

5.2访问层

/**
 * 根据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 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;
	}
}

5.3生成方法

/**
 * 根据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(){{
					//生成数据
					put("demand", ydgdTemplete.getDemand());
					//生成列表数据
					put("detailList", new NumbericRenderData(new ArrayList() {
						{
							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模板问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


当前题目:怎么使用poi-tl操作word模板
链接URL:http://azwzsj.com/article/ihsjdi.html