一、序言
在日常開(kāi)發(fā)中,常常有動(dòng)態(tài)word文件生成的需求,通過(guò)編制模版,然后動(dòng)態(tài)修改word內(nèi)容以組合成新的文件。報(bào)告單、請(qǐng)假單、發(fā)票頁(yè)等都可以使用動(dòng)態(tài)生成word來(lái)解決。
筆者總結(jié)歸納出通用技術(shù)要點(diǎn),盡可能降低廣大開(kāi)發(fā)者的使用技術(shù)門(mén)檻。
二、制作與渲染模版
(一)總體流程
1、準(zhǔn)備數(shù)據(jù)
通過(guò)查詢(xún)數(shù)據(jù)庫(kù)獲取需要修改的數(shù)據(jù),或者是調(diào)用遠(yuǎn)程API接口獲得數(shù)據(jù),數(shù)據(jù)準(zhǔn)備完畢后,進(jìn)入下一步。
2、制作word模版
新建并設(shè)計(jì)出期望效果的word文檔樣式,包含字體、字號(hào)、段落樣式布局等,先做出一個(gè)靜態(tài)的word文件。
3、制作freemark模版
在新建word模版的基礎(chǔ)上,使用freemark語(yǔ)法,結(jié)合已經(jīng)準(zhǔn)備填充的數(shù)據(jù)結(jié)構(gòu),將需要?jiǎng)討B(tài)變化的內(nèi)容用變量表示。
用變量替換時(shí)常見(jiàn)的情形時(shí)對(duì)象屬性和循環(huán)。
freemark模版制作完成后,保存為ftl后綴文件。
4、渲染字符串
將數(shù)據(jù)和freemark模版組合,并且將前期制作的變量占位符替換,形成最終的word文件
(二)編碼實(shí)踐
按照筆者提供的流程和SDK編碼實(shí)踐相對(duì)比較簡(jiǎn)單。
1、引入依賴(lài)
如下依賴(lài)包含封裝的工具方法,大幅降低使用門(mén)檻。
xin.altitude.cms ucode-cms-word 1.5.6
2、編碼
/* 模擬準(zhǔn)備數(shù)據(jù) */List data = TempUtils.readJsonList(“HumanDemo.json”, HumanDemo.class);/* 將數(shù)據(jù)填充到模版中并生成word文檔 */DocUtils.fillWord(“templates/HumanDemo.ftl”, data);
從流程到編碼實(shí)踐比較簡(jiǎn)單。
到此為止,已經(jīng)可以快速體驗(yàn)word生成技術(shù)了。
三、內(nèi)容拓展
上述分析的word生成如果頁(yè)面結(jié)構(gòu)較為簡(jiǎn)單,實(shí)現(xiàn)起來(lái)難度不大,假如涉及到如下情形,實(shí)現(xiàn)起來(lái)就會(huì)增加不少難度。
增加的困難主要來(lái)源于頁(yè)面布局復(fù)雜、使用各種組件控件多、多媒體資源的引入。解決方法仍然參考上述流程。
(一)復(fù)雜模版
1、多媒體資源布局
當(dāng)模版中需求多媒體(圖片)內(nèi)容,并且數(shù)量動(dòng)態(tài)變化,位置不固定時(shí),實(shí)現(xiàn)難度較大。
2、復(fù)雜內(nèi)容布局
當(dāng)模版中包含文本,選擇框,橫向合并單元格、縱向合并單元格時(shí),實(shí)現(xiàn)難度較大。
3、動(dòng)態(tài)渲染表格
涉及到動(dòng)態(tài)渲染合并單元格時(shí),實(shí)現(xiàn)難度較大。
上述復(fù)雜模版制作,筆者均有實(shí)踐。
(二)文件格式
對(duì)于word文件格式有兩種,一種是.doc后綴文件,一種是.docx后綴文件,上述討論屬于前者,后者模版制作與生成比前者要復(fù)雜,將在后續(xù)的版本中提供API操作接口。
.docx后綴文件的word在轉(zhuǎn)PDF方面兼容性比較好。
(三)使用建議
開(kāi)發(fā)前,盡可能將模版布局確認(rèn),對(duì)于復(fù)雜頁(yè)面結(jié)構(gòu)修改需要增加較大投入
熟悉FreeMark語(yǔ)法、word文件結(jié)構(gòu)將會(huì)對(duì)word模版開(kāi)發(fā)受益
多使用、多練將有助于制作出漂亮的文檔。
文章來(lái)自https://www.cnblogs.com/javazhishitupu/p/16373006.html