java实现word模板打印
转ftl模板
先将你的word模板配置好
这⾥⾯的${}类似与jsp的el表达式,之后在java代码中放⼊你的值,既能将你想要输⼊的值打在模板上。然后再将这个word转xml,再改为ftl(这⾥改的都是他的后缀)。
java的数据导⼊
map.put("xsmc1",(0).get("xsmc1")));
map.put("xsmc2",(0).get("xsmc2")));
map.put("xsmc3",(0).get("xsmc3")));
map.put("xsmc4",(0).get("xsmc4")));
map.put("xsmc5",(0).get("xsmc5")));
//type是获取模板路径的⼀个key
file = ateDoc(map, type);
/**
* 将键值数据填充到模板中
* @param dataMap 键值数据map
* @param type 模板
* @return
*/
public static File createDoc(Map<?, ?> dataMap, String type){
String name = "temp" + (int)(Math.random() * 100000) + ".doc";
File f = new File(name);
Template t = (type);
try{
// 这个地⽅不能使⽤FileWriter因为需要指定编码类型否则⽣成的Word⽂档会因为有⽆法识别的编码⽽⽆法打开
Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
t.process(dataMap, w);
w.close();
}catch (Exception ex){
el表达式获取map的值ex.printStackTrace();
throw new RuntimeException(ex);
}
return f;
}
jar包就是⽤freemarker.jar就⾏。
ftl模板问题修改
ftl虽然⾥⾯内容⽐较多,但是其实修改起来是⽐较⽅便的。
⾸先tc可以理解为html中的td,其实有tcPr、p、pPr和r。我们应该注意的地⽅就是r,⾥⾯就是你要输⼊的模板值。因为有时候改word模板是⼀件很⿇烦的事情,可以直接将整个w:tc拿起来复制粘贴使⽤,需要改的就是w:r中的内容。
如果你传⼊的值为null,他⽤模板创建createDoc时会报错。我们可以根据报错到具体是模板中的那⼀⾏。
<#if xsmc1 ??>${xsmc1}<#/if>//这⾥是判断他的这个值是否为null
实现复选框勾选展⽰的,因为我这⾥word版本的问题,左边的是不勾选,右边为勾选。
<#if kcfzr ??>//先判断是否为null,为什么则为不勾选的。因为数据库中拿到的值可能为null
<#if kcfzr=="1">
<w:sym w:font="Wingdings 2" w:char="0052"/>//勾选中
<#else>
<w:sym w:font="Wingdings 2" w:char="00A3"/>//没有勾选
</#if>
<#else>
<w:sym w:font="Wingdings 2" w:char="00A3"/>
</#if>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论