【java】Freemarker 動態生成word(帶圖片表格)

一、添加freemarker.jar 到java項目。java

二、新建word文檔。編碼

三、將文檔另存爲xml 格式。xml

四、將xml格式化後打開編輯(最好用notepad,有格式),找到須要替換的內容,將內容換爲變量(${變量名})。blog

五、生成表格,包括動態列和動態行。其中columnList 是List<String>格式的表頭數據,datas 是List<List<String>>格式的所有表格數據。圖片

<w:tblGrid>
<#list columnList as columnName>
<w:gridCol w:w="1579"/>
</#list>
</w:tblGrid>
<#list datas as entity>
<w:tr wsp:rsidR="0015753E" wsp:rsidRPr="00765BE2" wsp:rsidTr="00765BE2">
<#list entity as cell>文檔

<w:tc>
<w:tcPr>
<w:tcW w:w="853" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p wsp:rsidR="0015753E" wsp:rsidRPr="00765BE2" wsp:rsidRDefault="007C79C8" wsp:rsidP="00765BE2">
<w:pPr>
<w:jc w:val="center"/>
</w:pPr>
<w:r wsp:rsidRPr="00765BE2">
<w:rPr>
<wx:font wx:val="宋體"/>
</w:rPr>
<w:t>${cell}</w:t>
</w:r>
</w:p>
</w:tc>
</#list>
</w:tr>
</#list>get

六、生成圖片。將xml文件中<w:binData></w:binData> 中的數據替換成須要的圖片的base64編碼便可。it

七、保存後,將文件後綴改成.ftl,放到java項目文件夾。生成word:io

Map<String, Object> map = new HashMap<String, Object>();
map.put("變量名", 變量內容);

base64

 

public static void createWord(Map<String, Object> map, String filePath) { try { Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); configuration.setClassForTemplateLoading(TemplateToWord.class, "/com/cn/templates/");//模板所在文件夾 Template template = configuration.getTemplate("report.ftl");//根據名稱加載模板 File outFile = new File(filePath);//生成新word文檔 if (!outFile.getParentFile().exists()) { outFile.getParentFile().mkdirs(); } Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); // 生成文件 template.process(map, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } }

相關文章
相關標籤/搜索