使用 freemarker 导出 word

模板名称.xml


<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 14">
<meta name=Originator content="Microsoft Word 14">
	<title>
</title>
    <style media="all">
    .noprint { display: none }
    td{height:30px; padding-left:5px;}
    
    .tableList{ border:solid 1px #000; border-right:none; border-collapse:collapse; float:left}
.tableList td{ text-align:center;font-size : 15px  height:35px; line-height:21px; border-right:solid 1px #000;border-collapse:collapse; border-bottom:solid 1px #000;}
    </style>
</head>

<body style="font-size:12px;">
<#list allSuperviseList as superviseMap>
	<#list superviseMap?keys as itemKey>
	     <#assign superviseList="" />
	     <#assign superviseList=(superviseMap[itemKey]?if_exists) />
	     <#if (superviseMap_index%2=0)>
			<center><font size="3">${itemKey}</font></center>
			<table id="tbQuestion" width="700" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="vertical-align: top;" class='tableList'>
				<tr style="height:40px; text-align: center;">
					<td width='30%'><b>监察点</b></td>
					<td width='70%'><b>规则描述</b></td>
			    </tr>
			    <#if (!superviseList?? || superviseList?size=0)>
			    	<tr>
				    	<td></td>
				    	<td></td>
			    	</tr>
			    <#else>
			    
			    <#assign outerCount=0 /> <!-- 第几个监察点 -->
				<#list superviseList as supervise>
					<#assign outerCount=outerCount+1 />
					<#assign innerCount=0 />
					<#assign size=0 />
					<#list superviseList as sup>
						<#assign innerCount=innerCount+1 />
						<#if (innerCount < outerCount && supervise.sysDict.dictName=sup.sysDict.dictName)>
							<#assign size=size+1 />
						</#if>
					</#list>
					<#if (size=0)>
						<#assign count=0 />
						<#assign content=supervise.sysDict.dictName />
						<#list superviseList as s>
				    		<#if (supervise.sysDict.dictName=s.sysDict.dictName)>
						    	<#assign count=count+1 />
						    </#if>
				    	</#list>
					    <tr>
					    	<td style="text-align:left; padding:5px;" rowspan="${count}">
						    	<#if (supervise.sysDict.dictName)??>
									${supervise.sysDict.dictName}
								</#if>
					    	</td>
				    		<#list superviseList as s>
					    		<#assign index=0 />
						    	<#if (supervise.sysDict.dictName=s.sysDict.dictName)>
						    		<#assign index=index+1 />
						    		<#if (count = 1)>
						    			<td>
					    					${s.superviseDescribe}
					    				</td>
					    				</tr>
						    		</#if>
						    		<#if (count > 1)>
						    			<#if index = 1>
						    				<td>
						    					${s.superviseDescribe}
						    				</td>
						    				</tr>
						    			<#else>
						    			<tr>
						    				<td>
						    					${s.superviseDescribe}
						    				</td>
						    			</tr>
						    			</#if>
						    		</#if>
							    </#if>
					    	</#list>
					</#if>
				</#list>
				</#if>
			</table>
			<br/>
			<br/>
		<#elseif (superviseMap_index%2=1) >
			<center><font size="3">${itemKey}</font></center>
			<table id="tbQuestion" width="700" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="vertical-align: top;" class='tableList'>
				<tr style="height:40px; text-align: center;">
					<td width='15%'><b>异常类型</b></td>
					<td width='20%'><b>分项内容</b></td>
					<td width='65%'><b>异常描述</b></td>
			    </tr>
			    <#if (!superviseList?? || superviseList?size=0)>
			    	<tr>
				    	<td></td>
				    	<td></td>
				    	<td></td>
			    	</tr>
			    <#else>
			    
			    <#assign outerCount=0 /> <!-- 第几个监察点 -->
				<#list superviseList as serviceSupervise>
					<#assign outerCount=outerCount+1 />
					<#assign innerCount=0 />
					<#assign size=0 />
					<#list superviseList as sup>
						<#assign innerCount=innerCount+1 />
						<#if (innerCount < outerCount && serviceSupervise.sysDict.dictName=sup.sysDict.dictName)>
							<#assign size=size+1 />
						</#if>
					</#list>
					<#if (size=0)>
						<#assign count=0 />
						<#list superviseList as s>
				    		<#if (serviceSupervise.sysDict.dictName=s.sysDict.dictName)>
						    	<#assign count=count+1 />
						    </#if>
				    	</#list>
					    <tr>
					    	<td style="text-align:left; padding:5px;" rowspan="${count}">
						    	<#if (serviceSupervise.sysDict.dictName)??>
									${serviceSupervise.sysDict.dictName}
								</#if>
					    	</td>
				    		<#list superviseList as s>
					    		<#assign index=0 />
						    	<#if (serviceSupervise.sysDict.dictName=s.sysDict.dictName)>
						    		<#assign index=index+1 />
						    		<#if (count = 1)>
						    			<td>
					    					${s.superviseContent}
					    				</td>
						    			<td>
					    					${s.superviseDescribe}
					    				</td>
					    				</tr>
						    		</#if>
						    		<#if (count > 1)>
						    			<#if index = 1>
						    				<td>
						    					${s.superviseContent}
						    				</td>
							    			<td>
						    					${s.superviseDescribe}
						    				</td>
						    				</tr>
						    			<#else>
							    			<tr>
							    				<td>
							    					${s.superviseContent}
							    				</td>
								    			<td>
							    					${s.superviseDescribe}
							    				</td>
							    			</tr>
						    			</#if>
						    		</#if>
							    </#if>
					    	</#list>
					</#if>
				</#list>
				</#if>
			</table>
			<br/><br/><br/><br/><br/><br/>
		</#if>			     
	</#list>
</#list>
	
</body>
</html>

java 代码


/**
	 * 批量导出服务事项内容
	 * @author liulx
	 * @date 2014-7-30
	 * @return
	 */
	public String batchExportServiceItem() {
		try {
			serviceList = mlbzServiceManagerService.findServiceItemsOrderByOrgan(areaId, organId, serviceItemsType, itemCode, itemName, isSubItem, BaseParameter.AUDIT_STATUS_3);
			Map<String, Map<String, String>> valueMap = new HashMap<String, Map<String,String>>();
			
			String itemTypeName = null;//事项类型名称
			String workTypeName = null;//日期类型
			String lawTypeName = null;//法定日期类型
			String sqccName = null;//事权层次名称
			String comeCenterNumName = "";//来中心次数对应的类型
			String dzwdTypeName=null;//电子档格式名称
			String yyFlagName = null;//网上预约名称
			String kdFlagName=null;//是否支持快递
			String specificOrderTypeName = "";//特殊程序名称
			String specificOrderType = null;//特殊程序名称
			List list = new ArrayList();
			List serviceStepList = new ArrayList();
			
			for (int j=0; j<serviceList.size(); j++) {
				queryObj = serviceList.get(j);
			
				//通过事项主键获取事项对象
				//得到事项类型
				Iterator it = BaseParameter.ITEMTYPE.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getServiceType())) {
						itemTypeName = BaseParameter.ITEMTYPE.get(queryObj.getServiceType());
						break;
					}
		         }
				
				//获取承诺期限
				 it = BaseParameter.DATETYPE.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getWorkType())) {
						workTypeName = BaseParameter.ITEMTYPE.get(queryObj.getWorkType());
						break;
					}
					
		         }
				//获取法律承诺期限
				it = BaseParameter.DATETYPE.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getLawType()))
						lawTypeName = BaseParameter.ITEMTYPE.get(queryObj.getLawType());
					
				}
				
				//获取事权层次
				 it = BaseParameter.SQCC.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getSqcc()))
						sqccName = BaseParameter.SQCC.get(queryObj.getSqcc());
		         }
				//是否支持网上预约
				it = BaseParameter.YES_NO.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getYyFlag()))
						yyFlagName = BaseParameter.YES_NO.get(queryObj.getYyFlag());
				}
				//是否支持快递送件
				it = BaseParameter.YES_NO.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getKdFlag()))
						kdFlagName = BaseParameter.YES_NO.get(queryObj.getKdFlag());
				}
				
				//获取受理提交的材料
				String comeType = queryObj.getComeCenterType();
				String[] comeCenterType = null;
				if (!Common.isNullOrSpace(comeType)) {
					comeCenterType = comeType.trim().split(",");
				}
				it = BaseParameter.COMECENTERTYPE.keySet().iterator();
				String temp = "";
				while (it.hasNext()) {
					temp = (String) it.next();
					if (!Common.isNullOrSpace(temp)) {
						temp = temp.trim();
					}
					if(temp.equals(queryObj.getComeCenterOther())){
						comeCenterNumName += BaseParameter.COMECENTERTYPE.get(queryObj.getComeCenterOther().trim()) + " ";
					}
					
					if (comeCenterType != null && comeCenterType.length > 0) {
						for (int i=0; i<comeCenterType.length; i++) {
							if(temp.equals(comeCenterType[i].trim())){
								if (temp.equals(BaseParameter.COMECENTERTYPE_2)) {
									comeCenterNumName += BaseParameter.COMECENTERTYPE.get(comeCenterType[i].trim());
									if (!Common.isNullOrSpace(queryObj.getComeCenterOther())) {
										comeCenterNumName += "(" + queryObj.getComeCenterOther() + ") ";
									}
								} else {
									comeCenterNumName += BaseParameter.COMECENTERTYPE.get(comeCenterType[i].trim()) + " ";
								}
							}
						}
					}
				}
				
				if (!Common.isNullOrSpace(comeCenterNumName)) {
					comeCenterNumName = comeCenterNumName.trim();
				}
				
				materialList = mlbzServiceMaterialService.queryMaterialList(queryObj.getServiceId());
				for(ServiceBaseMaterial serviceBaseMaterial:materialList){
					//获取电子档格式
					it = BaseParameter.DZWDTYPE.keySet().iterator();  
					while (it.hasNext()) {  
						if(it.next().equals(serviceBaseMaterial.getDzwdType()))
							dzwdTypeName = BaseParameter.DZWDTYPE.get(serviceBaseMaterial.getDzwdType());
					}
				}
				
				//获取服务表格list
				formList = mlbzServiceFormService.queryFormList(queryObj.getServiceId());
				
				//常见问题list
				questionList = mlbzServiceQuestionService.queryQuestionList(queryObj.getServiceId());
				
				//办理环节list
				stepList = mlbzServiceBaseStepService.queryServiceStepList(queryObj.getServiceId());
				
				for(ServiceBaseStep serviceBaseStep:stepList){
					
					//获取特别程序类型
					it = BaseParameter.SPECIFICTYPE.keySet().iterator();  
					while (it.hasNext()) {  
						if(it.next().equals(serviceBaseStep.getSpecificOrderType())){
							specificOrderType = BaseParameter.SPECIFICTYPE.get(serviceBaseStep.getSpecificOrderType());
							if(serviceBaseStep.getIsSpecific().equals("1")){
								if(specificOrderType != null){
									specificOrderTypeName += specificOrderType+" ";
								}
							}
						}
							
					}
						
					//廉政风险点信息list
					incorruptList = mlbzServiceBaseStepIncorruptService.queryIncorruptList(serviceBaseStep.getStepId());
					list.add(incorruptList);
				}
				
				Map<String, String> tempMap = new HashMap<String, String>();
				tempMap.put("itemTypeName", itemTypeName);
				tempMap.put("workTypeName", workTypeName);
				tempMap.put("lawTypeName", lawTypeName);
				tempMap.put("sqccName", sqccName);
				tempMap.put("comeCenterNumName", comeCenterNumName);
				tempMap.put("dzwdTypeName", dzwdTypeName);
				tempMap.put("yyFlagName", yyFlagName);
				tempMap.put("kdFlagName", kdFlagName);
				tempMap.put("specificOrderTypeName", specificOrderTypeName);
				tempMap.put("specificOrderType", specificOrderType);
				valueMap.put(queryObj.getServiceId(), tempMap);
				
				queryObj.setMaterialList(materialList);
				queryObj.setFormList(formList);
				queryObj.setQuestionList(questionList);
				queryObj.setStepList(stepList);
				queryObj.setList(list);
			}
			
			
			Map<String, Object> data = new HashMap<String, Object>();
			data.put("serviceList", serviceList);
			data.put("valueMap", valueMap);
			
			//导出事项名称
			areaName = sysAreaService.getSysAreaBytopId(areaId) != null ? sysAreaService.getSysAreaBytopId(areaId).getAreaName() : "";
			if (!Common.isNullOrSpace(organId)) {
				organName = sysOrganService.getSysOrganInfo(organId) != null ? sysOrganService.getSysOrganInfo(organId).getOrganName() : "";
			}
			
			String serviceItemNameStr = "";
			if (!Common.isNullOrSpace(serviceItemsType)) {
				Iterator it = BaseParameter.ITEMTYPE.keySet().iterator();  
				while (it.hasNext()) {  
					if(it.next().equals(queryObj.getServiceType())) {
						serviceItemNameStr = BaseParameter.ITEMTYPE.get(queryObj.getServiceType());
						break;
					}
				}
			}
			String exportFileName = new String((areaName + (!Common.isNullOrSpace(organName) ? ("_" + organName + "") : "") + (!Common.isNullOrSpace(serviceItemNameStr) ? ("_" + serviceItemNameStr) : "") + ".doc").getBytes(),"iso8859-1");
			String ftlDir = "WEB-INF/templates";
			String ftlName = "batchServiceBaseItem.ftl";
			String contentType = "application/octet-stream";
			
			documentHandler = new DocumentHandler();
			documentHandler.handleDocument(this.getRequest(), getResponse(),
					contentType, exportFileName, data, ftlDir, ftlName);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}

public class DocumentHandler{
	private Configuration configuration = null;

	public DocumentHandler() {
		configuration = new Configuration();
		configuration.setDefaultEncoding("UTF-8");
	}

	/**
	 * 加载模板 填充数据
	 * 
	 * @param request 请求
	 * @param response 响应
	 * @param contentType 返回流中的内容类型
	 * @param exportFileName 输出的文件的文件名
	 * @param data 预装数据
	 * @param ftlDir 模板存放目录
	 * @param ftlName 模板名
	 */
	public void handleDocument(HttpServletRequest request, HttpServletResponse response,
			String contentType, String exportFileName,
			Map<String, Object> data, String ftlDir, String ftlName)
			throws IOException {
		Template t = null;
		configuration.setServletContextForTemplateLoading(request.getSession().getServletContext(),ftlDir);
		configuration.setObjectWrapper(new DefaultObjectWrapper());
		configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
		
		t = configuration.getTemplate(ftlName);
		response.setCharacterEncoding("UTF-8");
		response.setContentType(contentType);
		exportFileName = URLDecoder.decode(exportFileName, "UTF-8");
		
		response.setHeader("Content-Disposition","attachment; filename=" + exportFileName);
		Writer out = response.getWriter();
		try {
			t.process(data, out);
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值