• freemarker导出带图片的word文档


    最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性

    这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台关联,可酌情处理

    首先将需要导出的word文档做处理,关于word文档最好是后缀为.doc,应为有些软件可能无法打开导出的文档,将需要修改的数据修改成${xxx}

    类型的内容,例如下面的文档

    修改后则变为如下类型: 

    后将文档另存为.xml文档,将需要修改的然后再打开xml文档,找到图片的位置,是一大段base64编码后的

    代码,形如<w:binData w:name="wordml://自定义.png" xml:space="preserve">UUUA......FFFFA</w:binData>

    将中间编码后的代码修改为${xxx}的类型,关于xxx的内容可以根据自己的需求修改,而后将文件关闭。将其后

    缀转为 .ftl 的格式。而后上后台代码:

     1 final static String separator = File.separator; // 系统路径分割符 
     2     
     3     public void exportSellPlan(HttpServletRequest request, HttpServletResponse response){
     4         String evaluation = "四年的大学生涯是我人生的一大转折点。"
     5                 + "我深深地懂得“责任,荣誉,国家”这六个字的含义。作为大学生我最基本的责任是学习。"
     6                 + "在大学期间我认真学习,发挥自己的特长,挖掘自身的潜力,从而提高了"
     7                 + "自身的学习能力和分析处理问题的能力,也获得了大家的认同。";
     8         //获得数据  
     9         Map<String, Object> map = new HashMap<String, Object>(); 
    10         map.put("profession", "xxx");
    11         map.put("name", "xxx");
    12         map.put("address","山西省xx县"); 
    13         map.put("email", "xxx@163.com");
    14         map.put("tel", "173xxx9927");
    15         map.put("skill1", "面对不同客人,用不同的语气、不同的态度,与客户要谈得来,处处为客户着想");
    16         map.put("skill2", "面对不同客人,用不同的语气、不同的态度,与客户要谈得来,处处为客户着想");
    17         map.put("skill3", "面对不同客人,用不同的语气、不同的态度,与客户要谈得来,处处为客户着想");
    18         map.put("skill4", "面对不同客人,用不同的语气、不同的态度,与客户要谈得来,处处为客户着想");
    19         map.put("hobby", "运动,看书,上网聊天,看电影。");
    20         map.put("evaluation", evaluation);
    21         map.put("graduateInstitutions", "南昌航空大学");
    22         map.put("degree", "本科");
    23         //map.put("image", getImageBase("E:"+ separator +"photo.jpg"));
    24         try {
    25             WordUtils.exportMillCertificateWord(request,response,map,"简历","jianli.ftl");
    26         } catch (IOException e) {
    27             e.printStackTrace();
    28         }    
    29     }
    30     
    31   //获得图片的base64码
    32     public static String getImageBase(String src) {
    33         if(src==null||src==""){
    34             return "";
    35         }
    36         File file = new File(src);
    37         //File file = new File(getRequest().getRealPath("/")+src.replace(getRequest().getContextPath(), ""));
    38         if(!file.exists()) {
    39             return "";
    40         }
    41         InputStream in = null;
    42         byte[] data = null;  
    43         try {
    44             in = new FileInputStream(file);
    45         } catch (FileNotFoundException e1) {
    46             e1.printStackTrace();
    47         }
    48         try {  
    49             data = new byte[in.available()];  
    50             in.read(data);  
    51             in.close();  
    52         } catch (IOException e) {  
    53           e.printStackTrace();  
    54         } 
    55         BASE64Encoder encoder = new BASE64Encoder();
    56         return encoder.encode(data);
    57     }

    关于excel导出:

     1 package com.haiyisoft.iecp.crm.web.struts;
     2 
     3 import java.io.BufferedWriter;
     4 import java.io.File;
     5 import java.io.FileNotFoundException;
     6 import java.io.FileOutputStream;
     7 import java.io.IOException;
     8 import java.io.OutputStreamWriter;
     9 import java.io.PrintWriter;
    10 import java.io.UnsupportedEncodingException;
    11 import java.io.Writer;
    12 import java.text.SimpleDateFormat;
    13 import java.util.Date;
    14 import java.util.Map;
    15 
    16 import javax.servlet.http.HttpServletRequest;
    17 import javax.servlet.http.HttpServletResponse;
    18 import javax.swing.filechooser.FileSystemView;
    19 
    20 import freemarker.template.Configuration;
    21 import freemarker.template.Template;
    22 import freemarker.template.TemplateException;
    23 
    24 public class WordUtils extends BaseAction{
    25      //配置信息,代码本身写的还是很可读的,就不过多注解了  
    26     private static Configuration configuration = null;  
    27     //这里注意的是利用WordUtils的类加载器动态获得模板文件的位置  
    28    // private static final String templateFolder = WordUtils.class.getClassLoader().getResource("../../").getPath() + "WEB-INF/templetes/";  
    29     private static final String templateFolder = "D:/uepstudio_uep/workspace/iecp/src/com/haiyisoft/iecp/crm/web/struts";  
    30     static {  
    31         configuration = new Configuration();  
    32         configuration.setDefaultEncoding("utf-8");  
    33         try {  
    34             configuration.setDirectoryForTemplateLoading(new File(templateFolder));  
    35         } catch (IOException e) {  
    36             e.printStackTrace();  
    37         }  
    38    }  
    39   
    40     private WordUtils() {  
    41         throw new AssertionError();  
    42     }  
    43   
    44     @SuppressWarnings("rawtypes")
    45     public static void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map,String title,String ftlFile) throws IOException {  
    46         //Template freemarkerTemplate = configuration.getTemplate(ftlFile);  
    47         Template t = null;
    48         try {
    49             // temp.ftl为要装载的模板
    50             t = configuration.getTemplate(ftlFile);
    51         } catch (IOException e) {
    52             e.printStackTrace();
    53         }
    54         // 获取桌面路径
    55         File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
    56         String desktopPath = desktopDir.getAbsolutePath();
    57         desktopPath = desktopPath.replace("\", "/");
    58         // 输出文档路径及名称
    59         java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    60         File outFile = new File(desktopPath + "/" + sdf.format(new Date()) + title);
    61         Writer out = null;
    62         FileOutputStream fos = null;
    63         try {
    64             fos = new FileOutputStream(outFile);
    65             OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");
    66             out = new BufferedWriter(oWriter);
    67         } catch (FileNotFoundException e1) {
    68             e1.printStackTrace();
    69         } catch (UnsupportedEncodingException e) {
    70             e.printStackTrace();
    71         }
    72         try {
    73             t.process(map, out);
    74             out.close();
    75             fos.close();
    76         } catch (TemplateException e) {
    77             e.printStackTrace();
    78         } catch (IOException e) {
    79             e.printStackTrace();
    80         }
    81         response.setContentType("text/html;charset=UTF-8");
    82         response.setCharacterEncoding("UTF-8");
    83         PrintWriter outW = response.getWriter();
    84         outW.write("导出成功!</br>" + outFile.getPath());
    85         outW.close();
    86     }  
    87 }

    导出后的文件为20180322135608简历.doc桌面文件:

  • 相关阅读:
    单词统计
    易学app开发——10
    易学app开发--9
    易学app开发——8
    易学app开发----7
    易学app开发----6
    易学app开发----5
    易学app开发----4
    易学app开发----3
    顶会热词统计
  • 原文地址:https://www.cnblogs.com/TheKiteRunner/p/8623347.html
Copyright © 2020-2023  润新知