freemark导出word

一、 准备模版
填充word数据,图片用大小合适的真实图片代替,生成ftl文件后修改为参数形式。
在这里插入图片描述
填充完数据后另存为xml文件,打开文件参数正常,没有数据断开的情况在这里插入图片描述
在这里插入图片描述
文件后缀改为ftl格式,打开文件对数据集合修改和图片参数修改
集合数据填充可参考https://blog.csdn.net/weixin_41701049/article/details/83143998
图片数据填充

<#list dts.imagelist as image><w:pict><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><v:shape id="图片 29" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:174.6pt;height:128.4pt;mso-position-horizontal-relative:page;mso-position-vertical-relative:page"><v:fill o:detectmouseclick="t"/><w:binData w:name="${"wordml://0"+dts_index+3+"00000"+image_index+1+".png"}" xml:space="preserve">${image}
</w:binData><v:imagedata src="${"wordml://0"+dts_index+3+"00000"+image_index+1+".png"}" o:title=""/></v:shape></w:pict></#list>

配合参考https://bbs.csdn.net/topics/392194575?page=1

二、java后台

@ResponseBody
	@RequestMapping(value = "/exportSubgrade", method = RequestMethod.GET)
	public String exportSubgrade(HttpServletRequest request, HttpServletResponse response,@RequestParam("fPkMtntaskrecordid") String fPkMtntaskrecordid) {
		MtntaskrecordEntity mtntaskrecordEntity=null;
		Map<String, Object> dataMap = new HashMap<String, Object>();
		List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>();
		List<Map<String,Object>> tests = new ArrayList<Map<String,Object>>();
		List<Map<String,Object>> dtslist = new ArrayList<Map<String,Object>>();
		try {
			mtntaskrecordEntity= mtntaskrecordService.selectMtntaskrecordByid(fPkMtntaskrecordid);
			dataMap.put("wxxmmc", mtntaskrecordEntity.getfVcBoqbillnm());
			dataMap.put("bgbh", mtntaskrecordEntity.getfVcIdentifier());
			dataMap.put("lxbm", mtntaskrecordEntity.getfVcRoadcode());
			dataMap.put("sgrq", new SimpleDateFormat("yyyyMMdd").format(mtntaskrecordEntity.getfDtConstructiontime())
					+"-"+new SimpleDateFormat("yyyyMMdd").format(mtntaskrecordEntity.getfDtConstructionendtime()));
			dataMap.put("lxmc", mtntaskrecordEntity.getfVcRoadnm());
			dataMap.put("tq", mtntaskrecordEntity.getfVcWeather());
			dataMap.put("gldw", mtntaskrecordEntity.getfVcManagenm());
			dataMap.put("sgdw", mtntaskrecordEntity.getfVcConstructionnm());
			dataMap.put("zysgsbjcl", mtntaskrecordEntity.getfVcEquipmentnm());
			dataMap.put("zysgry", mtntaskrecordEntity.getfVcConstructionPersonnel());
			dataMap.put("rwdbh", mtntaskrecordEntity.getfVcTaskcode());
			List<InventoryEntity> disdtslist=mtntaskrecordEntity.getInventoryList();
			for (int i = 0; i < disdtslist.size(); i++) {
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("xh", i+1);
				map.put("fx", disdtslist.get(i).getfVcDirection());
				map.put("zh", disdtslist.get(i).getfVcStakenumber());
				map.put("wz", disdtslist.get(i).getfVcPosition());
				map.put("qdxm", disdtslist.get(i).getfVcItemlist());
				map.put("dw", disdtslist.get(i).getfVcUnit());
				map.put("sbsl", disdtslist.get(i).getfDbDeclarenumber());
				map.put("sksl", disdtslist.get(i).getfDbReviewnumber());
				String sxx="";
				if(disdtslist.get(i).getfInTimeliness()==0) {
					sxx="否";
				}else if(disdtslist.get(i).getfInTimeliness()==1) {
					sxx="是";
				}
				map.put("sxx", sxx);
				map.put("bz", disdtslist.get(i).getfVcRemark());
				list1.add(map);
			}
			dataMap.put("list1", list1);
			List<InspectionrecordEntity> inspectionlist=mtntaskrecordEntity.getInspectionrecordList();
			for(int i=0;i<inspectionlist.size();i++) {
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("jyxm", inspectionlist.get(i).getfVcBoqbillnm());
				map.put("gdzhyxpc", inspectionlist.get(i).getfVcRegulations());
				String zjjg="";
				if(inspectionlist.get(i).getfInSelfcheck()==1) {
					zjjg="合格";
				}else if(inspectionlist.get(i).getfInSelfcheck()==2) {
					zjjg="不合格";
				}
				map.put("zjjg", zjjg);
				String ysjg="";
				if(inspectionlist.get(i).getfInAcceptance()==1) {
					ysjg="合格";
				}else if(inspectionlist.get(i).getfInAcceptance()==2) {
					ysjg="不合格";
				}
				map.put("ysjg", ysjg);
				map.put("bhgsm", inspectionlist.get(i).getfVcUnqualifiedstatement());
				tests.add(map);
			}
			dataMap.put("tests", tests);
			
			String zjyj="";
			if(mtntaskrecordEntity.getfInConunitcheck()==0) {
				zjyj="合格";
			}else if(mtntaskrecordEntity.getfInConunitcheck()==1) {
				zjyj="不合格";
			}
			dataMap.put("zjyj", zjyj);
			dataMap.put("zjyjqz", mtntaskrecordEntity.getfVcConunitsign()+"/"+new SimpleDateFormat("yyyyMMdd").format(mtntaskrecordEntity.getfDtConunittime()));
			String ysyj="";
			if(mtntaskrecordEntity.getfInManunitcheck()==0) {
				ysyj="合格";
			}else if(mtntaskrecordEntity.getfInManunitcheck()==1) {
				ysyj="不合格";
			}
			dataMap.put("ysyj", ysyj);
			dataMap.put("zgtz", mtntaskrecordEntity.getfVcManunitnotice());
			dataMap.put("zgtzqz", mtntaskrecordEntity.getfVcConunitsign()+"/"+new SimpleDateFormat("yyyyMMdd").format(mtntaskrecordEntity.getfDtManunittime()));
			List<MtntaskrecorddtsEntity> mtntaskrecorddtslist=mtntaskrecordEntity.getMtntaskrecorddtsList();
			for (int i = 0; i < mtntaskrecorddtslist.size(); i++) {
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("xh2", i+1);
				String[] imagessrc=mtntaskrecorddtslist.get(i).getfVcImages().split(",");
				List<String> imagelist = new ArrayList<String>();
				for(int j=0;j<imagessrc.length;j++) {
					imagelist.add(imgBase64(imagessrc[j]));
				}
				map.put("imagelist", imagelist);
				map.put("zyjlsm", mtntaskrecorddtslist.get(i).getfVcDescription());
				dtslist.add(map);
			}
			dataMap.put("dtslist", dtslist);
			dataMap.put("qz", mtntaskrecordEntity.getfVcConunitsign());
			dataMap.put("sgdwrq", new SimpleDateFormat("yyyyMMdd").format(mtntaskrecordEntity.getfDtConunittime()));
			
			response.setContentType("application/octet-stream; charset=UTF-8");
			String as = "高速公路路基日常养护作业" + new SimpleDateFormat("MM.dd").format(new Date()) + ".doc";
			String fileName = as;// = java.net.URLEncoder.encode(as, "UTF-8");
			/* 根据request的locale 得出可能的编码,中文操作系统通常是gb2312 */
			fileName = new String(as.getBytes("GB2312"), "ISO8859-1");
			as = fileName;
			response.setHeader("content-disposition", "attachment;filename=" + as);
			Writer out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "utf-8"));// 重点:一定要注意编码格式,漏写编码格式将导致word无法打开(xml非法字符)
			
			Word word = new Word();
			
			word.createWord(dataMap, out, "luji.ftl",request.getSession().getServletContext());
			out.flush();
			out.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
package cn.microvideo.qsyhxc.repMtn.controller;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

import javax.servlet.ServletContext;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class Word {  
	     
	     private Configuration configuration = null;  
	      
	    public Word(){  
	        configuration = new Configuration();  
	         configuration.setDefaultEncoding("UTF-8");  
	    } 
	    
	     public void createWord(Map<String, Object> dataMap,Writer out,String modelName,ServletContext context){ 
	    	 //两种获取模版文件路径方式 
//	         configuration.setClassForTemplateLoading(this.getClass(), path+"exportModel");//模板文件所在路径
	    	 configuration.setServletContextForTemplateLoading(context, "/exportModel");
	         Template t=null;  
	         try {  
	             t = configuration.getTemplate(modelName); //获取模板文件
	         } catch (IOException e) {  
	             e.printStackTrace();  
	         }  
	           
	         try {  
	             t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件 
	         } catch (Exception e) {  
	             e.printStackTrace();  
	         } 
	     }  
	  
	}

三、前端调用

window.location.href='${basePath}/export/exportSubgrade?fPkMtntaskrecordid=' + fPkMtntaskrecordid;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值