freemaker创建word文档

1.讲doc文件保存成xml文档,再将后缀改成ftl。用editplus打开ftl文件,修改占位符,如下



2.framemaker操作class

package com.word;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import sun.misc.BASE64Encoder;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class WordUtil {
	/**
	 * 导出word公共类
	 * @param templetName	模版名称
	 * @param fileName		word名称	
	 * @param dataMap		数据
	 * @return
	 */
	public File createWord(String templetName, String fileName,
			Map<String, Object> dataMap) {
		Configuration configuration = new Configuration();
		configuration.setDefaultEncoding("utf-8");
		configuration.setClassForTemplateLoading(this.getClass(), "/excel"); // FTL文件所存在的位置
		Template t = null;
		try {
			// 获取模版文件
			t = configuration.getTemplate(templetName);
		} catch (IOException e) {
			e.printStackTrace();
		}
		File outFile = new File(fileName);
		Writer out = null;
		try {
			out = new OutputStreamWriter(new FileOutputStream(outFile),
					"utf-8");
			t.process(dataMap, out);
			out.close();
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new RuntimeException(ex);
		}
		return outFile;
	}
	
	
	public void createWord1(String templetName, String fileName,
			Map<String, Object> dataMap) {
		Configuration configuration = new Configuration();
		configuration.setDefaultEncoding("utf-8");
		configuration.setClassForTemplateLoading(this.getClass(), "/excel"); // FTL文件所存在的位置
		Template t = null;
		try {
			t = configuration.getTemplate(templetName,"UTF-8"); // 文件名
		} catch (IOException e) {
			e.printStackTrace();
		}
		File outFile = new File(fileName);
		Writer out = null;
		try {
			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(outFile),"UTF-8"));
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			t.process(dataMap, out);
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public String getImageStr(String imgFile) {
		InputStream in = null;
		byte[] data = null;
		try {
			in = new FileInputStream(imgFile);
			data = new byte[in.available()];
			in.read(data);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		BASE64Encoder encoder = new BASE64Encoder();
		return encoder.encode(data);
	}
	public static void main(String[] args) {
		WordUtil wu = new WordUtil();
		Map<String, Object> dataMap = new HashMap<String, Object>();
		dataMap.put("image", wu.getImageStr("d:/kcjyfx.png"));
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < 2; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("xuhao", i);
			map.put("neirong", "内容" + i);
			list.add(map);

		}
		dataMap.put("list", list);
		dataMap.put("info", "测试");
		
		wu.createWord1("1.ftl", "D:/zzz1.doc", dataMap);
	}
}
3.运行类

package com.word;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.word.WordUtil;

public class lyfTest {
	public static void main(String[] args) {
		func2();
	}

	/**
	 * 单个
	 */
	private static void func1() {
		lyfTest lyf=new lyfTest();
		String fileName = lyf.getPorjectPath("htjswcl.doc");// 一键式报表-物资采购计划完成率
		WordUtil wu = new WordUtil();
		Map<String, Object> dataMap = new HashMap<String, Object>();
		List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
		Map<String,Object> maptemp1=new HashMap<String,Object>();
		maptemp1.put("xh", 1.1);
		maptemp1.put("xmdw", "xmdw1");
		maptemp1.put("xmmc", "xmmc1");
		maptemp1.put("hwmc", "hwmc1");
		maptemp1.put("gg", "gg1");
		maptemp1.put("sl", "sl1");
		maptemp1.put("dw", "dw1");
		maptemp1.put("hsdj", "hsdj1");
		maptemp1.put("hszj", "hszj1");
		maptemp1.put("jhsj", "jhsj1");
		maptemp1.put("ddjfs", "ddjfs1");
		
		Map<String,Object> maptemp2=new HashMap<String,Object>();
		maptemp2.put("xh", 1.2);
		maptemp2.put("xmdw", "xmdw2");
		maptemp2.put("xmmc", "xmmc2");
		maptemp2.put("hwmc", "hwmc2");
		maptemp2.put("gg", "gg2");
		maptemp2.put("sl", "sl2");
		maptemp2.put("dw", "dw2");
		maptemp2.put("hsdj", "hsdj2");
		maptemp2.put("hszj", "hszj2");
		maptemp2.put("jhsj", "jhsj2");
		maptemp2.put("ddjfs", "ddjfs2");
		
		list.add(maptemp1);
		list.add(maptemp2);
		dataMap.put("details", list);
		
		dataMap.put("bh", "bh");
		dataMap.put("sgdw", "sgdw");
		dataMap.put("mf", "mf");
		dataMap.put("htbh", "htbh");
		dataMap.put("xxjg1", "xxjg1");
	    dataMap.put("xxjg2", "xxjg2");
		// 大写金额
		String dxje ="DXJE";
		dataMap.put("dxjg1", "dxjg1");
		dataMap.put("dxjg2", "dxjg2");
		wu.createWord1("采购供货单 - 副本.ftl", fileName, dataMap);
	}
	
	/**
	 * 两个
	 */
	private static void func2() {
		lyfTest lyf=new lyfTest();
		String fileName = lyf.getPorjectPath("htjswc2.doc");// 一键式报表-物资采购计划完成率
		WordUtil wu = new WordUtil();
		Map<String, Object> mainDataMap = new HashMap<String, Object>();
		
		/**
		 * 第一份数据
		 */
		Map<String, Object> dataMapOne = new HashMap<String, Object>();
		List<Map<String,Object>> listMain=new ArrayList<Map<String,Object>>();
		List<Map<String,Object>> listOne=new ArrayList<Map<String,Object>>();
		Map<String,Object> maptemp1=new HashMap<String,Object>();
		maptemp1.put("xh", 1.1);
		maptemp1.put("sgdw", "sgdw1");
		maptemp1.put("xmdw", "xmdw1");
		maptemp1.put("xmmc", "xmmc1");
		maptemp1.put("hwmc", "hwmc1");
		maptemp1.put("gg", "gg1");
		maptemp1.put("sl", "sl1");
		maptemp1.put("dw", "dw1");
		maptemp1.put("hsdj", "hsdj1");
		maptemp1.put("hszj", "hszj1");
		maptemp1.put("jhsj", "jhsj1");
		maptemp1.put("ddjfs", "ddjfs1");
		
		Map<String,Object> maptemp2=new HashMap<String,Object>();
		maptemp2.put("xh", 1.2);
		maptemp2.put("sgdw", "sgdw2");
		maptemp2.put("xmdw", "xmdw2");
		maptemp2.put("xmmc", "xmmc2");
		maptemp2.put("hwmc", "hwmc2");
		maptemp2.put("gg", "gg2");
		maptemp2.put("sl", "sl2");
		maptemp2.put("dw", "dw2");
		maptemp2.put("hsdj", "hsdj2");
		maptemp2.put("hszj", "hszj2");
		maptemp2.put("jhsj", "jhsj2");
		maptemp2.put("ddjfs", "ddjfs2");
		
		listOne.add(maptemp1);
		listOne.add(maptemp2);
		dataMapOne.put("details", listOne);
		
		dataMapOne.put("bh", "bh");
		dataMapOne.put("sgdw", "sgdw");
		dataMapOne.put("mf", "mf");
		dataMapOne.put("htbh", "htbh");
		dataMapOne.put("xxjg1", "xxjg1");
	    dataMapOne.put("xxjg2", "xxjg2");
		// 大写金额
		String dxje ="DXJE";
		dataMapOne.put("dxjg1", "dxjg1");
		dataMapOne.put("dxjg2", "dxjg2");
		
		/**
		 * 第二份数据
		 */
		Map<String, Object> dataMapTwo = new HashMap<String, Object>();
		List<Map<String,Object>> listTwo=new ArrayList<Map<String,Object>>();
		Map<String,Object> maptemp3=new HashMap<String,Object>();
		maptemp3.put("xh", 1.3);
		maptemp2.put("sgdw", "sgdw3");
		maptemp3.put("xmdw", "xmdw3");
		maptemp3.put("xmmc", "xmmc3");
		maptemp3.put("hwmc", "hwmc3");
		maptemp3.put("gg", "gg3");
		maptemp3.put("sl", "sl3");
		maptemp3.put("dw", "dw3");
		maptemp3.put("hsdj", "hsdj3");
		maptemp3.put("hszj", "hszj3");
		maptemp3.put("jhsj", "jhsj3");
		maptemp3.put("ddjfs", "ddjfs3");
		
		Map<String,Object> maptemp4=new HashMap<String,Object>();
		maptemp4.put("xh", 1.4);
		maptemp2.put("sgdw", "sgdw4");
		maptemp4.put("xmdw", "xmdw4");
		maptemp4.put("xmmc", "xmmc4");
		maptemp4.put("hwmc", "hwmc4");
		maptemp4.put("gg", "gg4");
		maptemp4.put("sl", "sl4");
		maptemp4.put("dw", "dw4");
		maptemp4.put("hsdj", "hsdj4");
		maptemp4.put("hszj", "hszj4");
		maptemp4.put("jhsj", "jhsj4");
		maptemp4.put("ddjfs", "ddjfs4");
		
		listTwo.add(maptemp3);
		listTwo.add(maptemp4);
		dataMapTwo.put("details", listTwo);
		
		dataMapTwo.put("bh", "bh2");
		dataMapTwo.put("sgdw", "sgdw2");
		dataMapTwo.put("mf", "mf2");
		dataMapTwo.put("htbh", "htbh2");
		dataMapTwo.put("xxjg1", "xxjg12");
		dataMapTwo.put("xxjg2", "xxjg22");
		// 大写金额
		dataMapTwo.put("dxjg1", "dxjg12");
		dataMapTwo.put("dxjg2", "dxjg22");
		
		listMain.add(dataMapOne);
		listMain.add(dataMapTwo);
		
		mainDataMap.put("cgghdlist", listMain);
		wu.createWord1("采购供货单 - 副本3.ftl", fileName, mainDataMap);
	}

	/**
	 * 获取当前项目的绝对路径
	 * 
	 * @param imnageName
	 *            要保存的图片文件名
	 * @return
	 */
	public String getPorjectPath(String imnageName) {
		String nowpath; // 当前tomcat的bin目录的路径 如

		String tempdir;
		nowpath = System.getProperty("user.dir");
		tempdir = nowpath.replace("bin", "webapps"); // 把bin 文件夹变到 webapps文件里面
		tempdir += "\\WebRoot\\page\\word\\image\\" + imnageName; // 拼成D:\java\software\apache-tomcat-6.0.14\webapps\sz_pro
		return tempdir;
	}

	// 生成word
	public void wordexl(Map<String, Object> paramMap,
			List<Map<String, Object>> list, Map<String, Object> wenziMap)
			throws ParseException {
		DecimalFormat df = new DecimalFormat("0.00");
		DecimalFormat df2 = new DecimalFormat("0.00%");
		String fileName = getPorjectPath("htjswcl.doc");// 一键式报表-物资采购计划完成率
		WordUtil wu = new WordUtil();
		Map<String, Object> dataMap = new HashMap<String, Object>();
		for (Map<String, Object> map : list) {
			map.put("DHYSRZL", df2.format(map.get("DHYSRZL") == null ? 0.00
					: map.get("DHYSRZL")));
			map.put("WZJSJSL", df2.format(map.get("WZJSJSL") == null ? 0.00
					: map.get("WZJSJSL")));
			map.put("WZHTJSWCL", df2.format(map.get("WZHTJSWCL") == null ? 0.00
					: map.get("WZHTJSWCL")));

		}
		dataMap.put("lista", list);
		dataMap.put("listb", list);

		/*
		 * dataMap.put("datea",paramMap.get("startDate1"));
		 * dataMap.put("dateb",paramMap.get("startDate2"));
		 */
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年mm月dd日");
		/*
		 * Date startDate1 = sdf.parse(paramMap.get("startDate1").toString());
		 * Date startDate2 = sdf.parse(paramMap.get("startDate2").toString());
		 */
		dataMap.put("a1", wenziMap.get("GYJHSJDHJE"));
		dataMap.put("a2", wenziMap.get("FPXYJE"));
		dataMap.put("a3", wenziMap.get("DHYSRZL"));
		dataMap.put("a4", wenziMap.get("DHYF"));
		dataMap.put("a5", wenziMap.get("SQJE"));
		dataMap.put("a6", wenziMap.get("WZJSJSL"));
		dataMap.put("a7", wenziMap.get("WZHTJSWCL"));
		dataMap.put("a8", wenziMap.get("bai"));
		dataMap.put("a9", wenziMap.get("zuihao"));
		dataMap.put("a10", wenziMap.get("zuishao"));
		dataMap.put("a11", wenziMap.get("WWCFPJYTMS"));
		dataMap.put("a12", df.format(wenziMap.get("WWCFPJYJE") == null ? "0"
				: wenziMap.get("WWCFPJYJE")));
		dataMap.put("a13", wenziMap.get("WWCZFSQTMS"));
		dataMap.put("a14", df.format(wenziMap.get("WWCZFSQJE") == null ? "0"
				: wenziMap.get("WWCZFSQJE")));
		dataMap.put("date1", paramMap.get("startDate1"));
		dataMap.put("date2", paramMap.get("startDate2"));
		dataMap.put("date3", paramMap.get("startDate1"));
		dataMap.put("date4", paramMap.get("startDate2"));
		wu.createWord1("htjswcl.ftl", fileName, dataMap);
	}
}

4.需要freemarker-2.3.8.jar包




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值