java freemarker導出word時添加或勾選複選框

最近項目導出word碰到一個需求,要求根據數據動態的決定word裏的複選框是否勾選,java

公司導出word用的是freemarker,相比較其餘技術,freemarker能夠很容易的控制輸出樣式,eclipse

在word裏編輯好模板,將要輸出的數據用${變量名}代替,而後java代碼裏給變量塞了值就能夠輸出了.jsp

首先咱們要知道在word裏打鉤和不打勾的複選框到底是什麼,新建一個word文檔,在裏面分別輸入打鉤和不打勾的複選框,而後右鍵另存爲.xml文件,工具

由於freemarker導出就是在這樣的xml文件的基礎上的字體

之因此在後面加了兩個字,是爲了以後能在n多的xml節點中找到兩種框的表現是什麼spa

這個時候咱們查看xml文件只有幾行,有一行還特別長,是很非人類的,咱們能夠把它拷貝到eclipse等第三方工具中,而後格式化一下,看到的就是格式化都的xml,咱們搜索一下清算兩個字,而後能夠清晰的看到在xml中兩種框的表現以下:3d

 

這個時候要實現功能就要用到freemarker中的if else標籤了,首先咱們在java代碼中添加變量值,好比map.put("check","true");code

而後修改模板,使用標籤判斷,模板修改爲相似這樣:xml

 

其實輸出的勾選複選框主要的核心就是<w:sym w:font="Wingdings 2" w:char="F052" />這句話,把以前的<w:r>標籤去掉也行,最簡單的寫法能夠直接這樣:blog

<#if check=="true">
    <w:sym w:font="Wingdings 2" w:char="F052" />
<#else>
    <w:t>□</w:t>
</#if>

可是這樣的輸出時有問題,會發現大小不是你想要的,很容易理解,由於沒有了那麼多節點的樣式控制,輸出的天然按word默認表現來了

因此實際使用仍是在本身模板中設置兩個框,而後存成xml文件看兩個框的表現,這樣最後輸出的框大小表現和你的word文檔字體大小等是同樣的.

最後將xml文件後綴名修改爲.ftl,就能夠導出了,隨着代碼中check變量的值不一樣,會導出不一樣的選擇框,效果以下:

 

其實freemarker裏除了if標籤,還有不少其餘的標籤,靈活使用這些標籤能夠很方便的完成咱們的需求,感受有點相似jsp,可讓咱們靈活輸出結果

相關文章
相關標籤/搜索