freemark导出word

基于业务需求需要导出word文件,在此给大家分享一个 关于freemark导出word文件的代码分享

1、第一步根据业务的要求获取到一个word文件,由此文件改为导出文件模板格式,模板格式如下:
请添加图片描述
2.将该模板另存为xml文件,进而重命名为.ftl文件,就得到了freemark的模板,因为是一个列表显示,我们需要所以我们需要根据freemark的标签进行改写,找到word中的每一个表格的行进行改写,改写后的ftl的文件如下:
请添加图片描述
3.我们将文件另存为后得到一个xml文件:此时有个注意点:

另外要注意的是:
一、不要直接在word中替换掉文字的方式添加标记,这种会有问题。
二、将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)

4.打开xml 文档,下面我们就更改四处,

一、加入 <w:tr>前<#list cutLists as cutList> 第一个list 不能变 第二个cutLists 为变量名 第三个cutList 为别名

二、将 f i e l d n a m e 改 为 {fieldname} 改为 fieldname{list.fieldname}

三、将 f i e l d n a m e 改 为 {fieldname} 改为 fieldname{list.fieldname}

四、</w:tr>后加入</#list>
请添加图片描述

将改好的xml 保存,如果notepad++报错不用理会,将xml 改为ftl 文件,就得到我们需要的ftl了,编译后的不要用word打开
6.引入jar包

    <properties>
		<!--freemarker-->
		<freemarker.version>2.3.23</freemarker.version>

	</properties>
	<dependencies>

	<!--freemarker-->
	<dependency>
		<groupId>org.freemarker</groupId>
		<artifactId>freemarker</artifactId>
		<version>${freemarker.version}</version>
	</dependency>

7.进入代码部分,将文件导出word封装

public void exportSimpleWord(Map<String,String> dataMap , String dirpath , String fileName) throws Exception{  
//          要填充的数据, 注意map的key要和word中${xxx}的xxx一致  
//	        Map<String,String> dataMaps = new HashMap<String,String>();  
//	        dataMap.put("shipper", "标题");  
//	        dataMap.put("consignee", "2016");  
//	        dataMap.put("departure", "3");  
//	        dataMap.put("destination", "6");   
//	        dataMap.put("charges", "lc");  
//	        dataMap.put("iec", "lc");
//	        dataMap.put("notify", "lc");
//	        dataMap.put("packages", "lc");
//	        dataMap.put("packages_unit", "lc");
//	        dataMap.put("actual_weight", "lc");
//	        dataMap.put("weight_unit", "lc");
//	        dataMap.put("goods", "lc");
	            
	      //Configuration用于读取ftl文件  
	      Configuration configuration = new Configuration();  
	      configuration.setDefaultEncoding("utf-8");  
	        
	      /*以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 
	       * 指定ftl文件所在目录的路径,而不是ftl文件的路径 
	       */  
	      //指定路径的第一种方式(根据某个类的相对路径指定)  
//	      configuration.setClassForTemplateLoading(this.getClass(),"/");  
	      //指定路径的第二种方式,我的路径是C:/a.ftl  
//	      configuration.setDirectoryForTemplateLoading(new File("C:\\")); 
	      
	      configuration.setDirectoryForTemplateLoading(new File(System.getProperty("user.dir") + "/resources"));
		  // 输出文档路径及名称
	      File outFile = new File(dirpath + fileName);

		  //以utf-8的编码读取ftl文件

		  Template t = configuration.getTemplate("导出.ftl");
		  Writer out = new BufferedWriter(new OutputStreamWriter(new      FileOutputStream(outFile), "utf-8"), 10240);
		  t.process(dataMap, out);
		  out.close();
	}
文章最后强调我自己踩过的坑
若数据数据中含有 “<” “>” "&"特殊字符,则对数据进行转义
解决办法我用的最笨的方式进行转义
value.replaceAll("&", “&”).replaceAll("<", “<”).replaceAll(">", “>”)

谢谢大家耐心的阅读,若有不知处,可以下方留言哦~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值