我是靠谱客的博主 专注橘子,最近开发中收集的这篇文章主要介绍java实现word文档的下载(Freemark),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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功能。

  1. 新建一个.doc 文档写好自己要导出文字如下图,把各种表格画好,在表格要填数据的空格中写上该数据后台对应的数据名,比如说后台传一个存有数据的SEX变量,就能在模板中替换${SEX}成真正的数据,怎么传待会说,                                       总之先建好表,像这样(自己的表格删掉了,借用一个别的博客的);  再把文档另存为.xml格式                                         
  2. 控制器中实现下载功能,这个方法写在控制器中
    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>", "&amp;");
    		string=string.replaceAll("<", "&lt;");
    		string=string.replaceAll(">", "&gt;");
    		string=string.replaceAll("&", "&amp;");
    		/*string=string.replaceAll("n", "<w:p></w:p>");
    		string=string.replaceAll("rn", "<w:p></w:p>");*/
    		return string;
    	}

     

  3. 需要用到的其他类:比如 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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部