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>