• springboot下载doc文档


    1、先找个一个doc的文件,另存为一份xml格式的文件,把名字改成fit文件放到resources目录结构下面

     

     2、修改pom文件,不然打包无法将resources目录下面的ftl文件打包进去

     3、配置一个javaBean

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Auther: lyl
     * @Date: 2020/12/5 10:41
     * @Description:
     */
    @Configuration
    public class ApplicationConfig {
        @Bean(name = "freeMarkerConfigurer")
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
            configurer.setDefaultEncoding("UTF-8");
            configurer.setTemplateLoaderPath("classpath:/templates");
            Map<String, Object> variables = new HashMap<>(1<<1);
            variables.put("xml_escape","fmXmlEscape");
            configurer.setFreemarkerVariables(variables);
            return configurer;
        }
    }

    4、注入这个bean,然后获取模板文件

    @Autowired
        private FreeMarkerConfigurer freeMarkerConfigurer;
    
    public void findByIdSelectDownload(Long id, HttpServletResponse response) {
            CaseDTO byIdSelect = this.findByIdSelect(id);
            Map<String, Object> dataMap = new HashMap<>();
            this.getData(dataMap,byIdSelect);
            // 创建configuration对象,得到模板文件保存的目录
            Configuration configuration = freeMarkerConfigurer.getConfiguration();
            // 加载一个模板文件,创建一个模板对象
            Locale locale = new Locale("zh");
            Template t=null;
            try {
                t = configuration.getTemplate("case.ftl",locale,"UTF-8"); //获取模板文件
            } catch (IOException e) {
                e.printStackTrace();
            }
            Writer out = null;
            try {
                response.setContentType("multipart/form-data;charset=utf-8");
                response.setHeader("Content-disposition", "attachment; filename=" + dataMap.get("caseId")+".doc");
                response.addHeader("Content-type", "application/octet-stream");
                out = response.getWriter();
                t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件
            } catch (TemplateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(out != null) {
                        out.close();
                    }
    //                if(outFile != null) {
    //                    outFile.delete();
    //                }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

     注意:这边循环下载图片遇到的bug

    <#list images as im>
          < w:pict >
           < v:shapetype  id = "_x0000_t75"  coordsize = "21600,21600"  o:spt = "75"  o:preferrelative = "t"  path = "m@4@5l@4@11@9@11@9@5xe"  filled = "f"  stroked = "f" >
            < v:stroke  joinstyle = "miter" />
            < v:formulas >
             < v:f  eqn = "if lineDrawn pixelLineWidth 0" />
             < v:f  eqn = "sum @0 1 0" />
             < v:f  eqn = "sum 0 0 @1" />
             < v:f  eqn = "prod @2 1 2" />
             < v:f  eqn = "prod @3 21600 pixelWidth" />
             < v:f  eqn = "prod @3 21600 pixelHeight" />
             < v:f  eqn = "sum @0 0 1" />
             < v:f  eqn = "prod @6 1 2" />
             < v:f  eqn = "prod @7 21600 pixelWidth" />
             < v:f  eqn = "sum @8 21600 0" />
             < v:f  eqn = "prod @7 21600 pixelHeight" />
             < v:f  eqn = "sum @10 21600 0" />
            </ v:formulas >
            < v:path  o:extrusionok = "f"  gradientshapeok = "t"  o:connecttype = "rect" />
            < o:lock  v:ext = "edit"  aspectratio = "t" />
           </ v:shapetype >
           < w:binData  w:name="${" wordml://0200000"+im_index+1+".jpg"}"  xml:space = "preserve" >${im}</ w:binData >
           < v:shape  id = "图片"  o:spid = "_x0000_i1025"  type = "#_x0000_t75"  style = "414.75pt;height:207.75pt;visibility:visible;mso-wrap-style:square" >
            <v:imagedata src="${" wordml://0200000"+im_index+1+".jpg"} o:title = "菜单" />
           </ v:shape >
          </ w:pict >
          </#list>
  • 相关阅读:
    asp.net程序集冲突解决笔记(未能加载文件或程序集"XXXXXXXXX")
    让Asp.net mvc WebAPI 支持OData协议进行分页查询操作
    jQuery Select 自动选择默认值
    nuget在jenkins上不能自动还原项目依赖包---笔记
    Ubuntu 14.04 server ssh 远程服务遇到的一点事儿
    Unbunt vi 编辑器键盘按键不正确的一次经历与解决方案
    Ubuntu root 密码 sudo passwd
    Visual Studio 2015 下 编译 libpng
    .NET使用Com组件的一点点教训笔记~
    Linux透明大页(Transparent Huge Pages)对ES性能对影响
  • 原文地址:https://www.cnblogs.com/liaoyanglong/p/14088748.html
Copyright © 2020-2023  润新知