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包