一、 将模板word中的特定字段替换(将数据导入word中)
所用jar包
一、 将模板word中的特定字段替换(将数据导入word中)
所用jar包
开发代码
/**
* @Title createContract
* @description 生成合同文档
* @param tmp 模板文件
* @param dst 生成后的合同文件
* @param values 合同中需要替换的内容(不含第1个多行表格)
* @param list 第一个表格中需要替换的内容(格式与values相同)
*/
public static void createContract(File tmp, File dst, Map<String,Object> values,
List<Map<String,Object>> list){
FileInputStream in = null;
try {
in = new FileInputStream(tmp);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
HWPFDocument hdt = null;
try {
hdt = new HWPFDocument(in);
} catch (IOException e1) {
e1.printStackTrace();
}
Range range = hdt.getRange();
//替换第一个表格内容
TableIterator tableIt = new TableIterator(range);
// if (tableIt.hasNext()) {
// Table tb = (Table) tableIt.next();
// int lines = list.size();
// if(!values.containsKey("inv_UsrCustId")){
// for(int i=0; i<lines; i++){
// TableRow tr = tb.getRow(i+2);
//
// //System.out.println(tr.text());
// Map<String,String> kvs = list.get(i);
// for (Map.Entry<String,String> entry: kvs.entrySet()) {
// tr.replaceText("${" + entry.getKey() + "}",entry.getValue());
// }
// }
// //删除多余行
// int trCnt = tb.numRows(); //总行数
//
// while(trCnt>lines+2){//有2行表头
// tb.getRow(trCnt-1).delete();
// trCnt --;
// }
// }
// }
//System.out.println(range.text());
//替换其他文本内容
String str = range.text();
Map<String,Object> map = new HashMap<String,Object>();
for (Map.Entry<String,Object> entry: values.entrySet()) {
String key = entry.getKey();
int i = str.indexOf(key);
if(!(i == -1)){
map.put(key, values.get(key));
}
}
for(Map.Entry<String,Object> entry: map.entrySet()){
//System.out.println(entry.getKey() + ":"+entry.getValue());
range.replaceText("${" + entry.getKey() + "}", entry.getValue()+"");
}
System.out.println("------------------------------分割线------------------------");
System.out.println(range.text());
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
FileOutputStream out = null;
try {
out = new FileOutputStream(dst,false);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
hdt.write(ostream);
} catch (IOException e) {
e.printStackTrace();
}
//输出字节流
try {
out.write(ostream.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ostream.close();
} catch (IOException e) {
e.printStackTrace();
}
}