概述
1.http://freemarker.foofun.cn/index.html (freemarker开发手册)根本看不懂。。。。
2.https://blog.csdn.net/fhx007/article/details/7902040 (一篇很全面的freemarker教程)
3.https://www.cnblogs.com/SHMILYHP/p/5502123.html (本文主体,实现word下载)
4.https://blog.csdn.net/lllllishi/article/details/75514731(本文主体,实现word下载)
5.使用Freemark模板实现下载word功能。
- 新建一个.doc 文档写好自己要导出文字如下图,把各种表格画好,在表格要填数据的空格中写上该数据后台对应的数据名,比如说后台传一个存有数据的SEX变量,就能在模板中替换${SEX}成真正的数据,怎么传待会说, 总之先建好表,像这样(自己的表格删掉了,借用一个别的博客的); 再把文档另存为.xml格式
- 控制器中实现下载功能,这个方法写在控制器中
public void download(){ try { int ryid = Integer.valueOf( this.getSessionAttr("loginUser").toString());///人员id ZcglGprckModel Model1=new ZcglGprckModel().GetItem(ryid);//下载要填写的数据 ZcglGprckModel Model2=new ZcglGprckModel().GetItem2(ryid);//下载要填写的数据 String classpath = "";//路径 classpath = this.getRequest().getRealPath("/").replaceFirst("/", ""); //实例化一个文件对象,实际是一个word文件 //Model2.getStr("JBQK_XM")是获取model2中字段为JBQK_XM的数据 File file=new File(classpath+"/tmp"+"/WORD/"+Model2.getStr("JBQK_XM")+".doc");//姓名.doc ///模板名,用String类型存 String template=""; //获取个人信息//把数据存在一个JSONObject对象中。 //parseXmlElement方法用于替换xml中一些特殊符号 JSONObject jsonObject= JSONObject.fromObject(parseXmlElement(BaseInfoService.GetItem2(ryid).toJson())); //使用的模板的文件名 template="info17.xml"; //绑定数据,list类型 jsonObject.put("rcchlist", AchievementsService.getRcchArray(ryid));//工作简历 生成文件 参数:(使用的模板,word文件绝对路径,要填写在word文件中的数据) FreemarkUtil.generateFile(template,file.getAbsolutePath(),jsonObject); ///返回要下载的文件 render(new TempFileRender(file)); } catch (TemplateException | IOException e) { e.printStackTrace(); this.renderText(""); } catch (freemarker.template.TemplateException e) { e.printStackTrace(); } }
替换xml中特殊字符
public static String parseXmlElement(String string){ if(string==null) return " "; string=string.replaceAll("<p>", "&"); string=string.replaceAll("<", "<"); string=string.replaceAll(">", ">"); string=string.replaceAll("&", "&"); /*string=string.replaceAll("n", "<w:p></w:p>"); string=string.replaceAll("rn", "<w:p></w:p>");*/ return string; }
-
需要用到的其他类:比如 FreemarkUtil ,
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; public class FreemarkUtil { /** * 获取模板 * * @param templateName * 模板名称(含后缀名) * @return Template * @throws IOException */ public static Template getTemplate(String templateName) throws IOException { Configuration cfg = new Configuration(); Template temp = null; String tmpRootstr = FreemarkUtil.class.getResource(templateName).getFile(); File tmpRootFile = new File(tmpRootstr).getParentFile(); if (tmpRootFile == null) { throw new RuntimeException("无法取得模板根路径!"); } try { cfg.setDefaultEncoding("utf-8"); cfg.setOutputEncoding("utf-8"); cfg.setDirectoryForTemplateLoading(tmpRootFile); /* cfg.setDirectoryForTemplateLoading(getResourceURL()); */ cfg.setObjectWrapper(new DefaultObjectWrapper()); temp = cfg.getTemplate(templateName); } catch (IOException e) { e.printStackTrace(); } return temp; } /** * 根据freemark模板生成文件 * * @param templateName * 模板名称(含后缀名) * @param filePath * 生成文件路径 * @param setting * 参数 */ public static void generateFile(String templateName, String filePath, Object dataMap) throws TemplateException, IOException { Writer writer = null; System.out.println("生成文件需要的参数1=========="+templateName+"n"+"参数2========="+filePath+"n"); System.out.println("参数3========="+dataMap+"n"); Template template = getTemplate(templateName);/空指针?? String dir = filePath.substring(0, filePath.lastIndexOf(File.separator)); File fdir = new File(dir); if (!fdir.exists()) { if (!fdir.mkdirs()) { System.out.println("创建目录" + fdir.getAbsolutePath() + "失败"); return; } } File file = new File(filePath); if(file.exists()) file.delete(); writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); template.setEncoding("utf-8"); template.process(dataMap, writer); writer.flush(); writer.close(); } }
最后
以上就是专注橘子为你收集整理的java实现word文档的下载(Freemark)的全部内容,希望文章能够帮你解决java实现word文档的下载(Freemark)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复