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


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

公司導出word用的是freemarker,相比較其他技術,freemarker可以很容易的控制輸出樣式,

在word里編輯好模板,將要輸出的數據用${變量名}代替,然后java代碼里給變量塞了值就可以輸出了.

首先我們要知道在word里打鈎和不打勾的復選框究竟是什么,新建一個word文檔,在里面分別輸入打鈎和不打勾的復選框,然后右鍵另存為.xml文件,

因為freemarker導出就是在這樣的xml文件的基礎上的

之所以在后面加了兩個字,是為了之后能在n多的xml節點中找到兩種框的表現是什么

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

 

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

然后修改模板,使用標簽判斷,模板修改成類似這樣:

 

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

<#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,可以讓我們靈活輸出結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM