骞堕€氳繃maven寮曞叆鎵€闇€渚濊禆org.springframework.bootspring-boot-starter-freemarker鍒涘缓瀵煎嚭妯℃澘1.棣栧厛鍒涘缓涓€涓獁ord妯℃澘鏂囨。锛屾ā鏉垮涓嬪浘word妯℃澘鍦板潃锛歨ttp://file.xiaoxiaofeng.site/files/word.doc鏀粯娉ㄦ剰word涓殑鍗犱綅绗︽牸寮忥紝鏄痜reemaker鐨勬牸寮忥紝璇︾粏瑙i噴濡備笅锛氭枃瀛楀鐞嗭細鐩存帴鎶婂瓧娈靛悕鏇挎崲鎴愪腑闂寸殑${}銆傚鏋滅洿鎺ュ湪word涓畾涔?{title}锛岃浆鎹㈡垚xml鐨勬椂鍊欏彲鑳戒細琚竴浜涗唬鐮侀殧寮€銆傝繖鏃跺€欎綘鍙渶瑕佺敤word鎵撳紑xml锛岄噸鏂拌緭鍏ヨ繖浜涘唴瀹瑰嵆鍙€傚己鐑堝缓璁敤IDE鎵撳紑锛岀劧鍚庢牸寮忓寲銆傛牳瀵瑰鐞嗗悗锛屽彲浠ヤ娇鐢╯earch灏藉彲鑳藉鐨勬悳绱€倄ml鏍煎紡浠g爜澶锛屼笉瑕佺敓纭煒傚浘鐗囧鐞嗭細闇€瑕佸湪word鏂囨。妯℃澘涓彃鍏ュ浘鐗囷紝灏唚ord杞垚xml鍚庯紝鎵撳紑xml锛屾妸鎴戜滑鐨勫浘鐗囪浆鎴愰暱闀跨殑base64銆傛垜浠彲浠ョ敤鎴戜滑鐨?{pic}鏇挎崲base64锛宲ic鏄瓧娈靛悕锛宭ist鍙互浠绘剰鏇挎崲銆傚鐞嗭細闇€瑕佸湪word鏂囨。妯℃澘涓彃鍏ヨ〃鏍硷紝鎵惧埌绗簩涓?w:tr>锛岀涓€琛屾槸鎴戜滑鐨凾itle锛屽湪瀹冨墠闈㈠姞涓?#listpeopleListaslist>鍏朵腑peopleList鏄闆嗗悎鐨勫悕绉癷ncominglist鍜宭ist鏄竴涓埆鍚嶃€傚弬鏁板€兼槸锛?{list.name}杩欐牱鐨勩€傚湪涓?w:tr>閰嶅鐨?/w:tr>涔嬪悗娣诲姞#list>銆傝娉曚笌freemaker鐨刦or寰幆璇硶鐩稿悓銆傚垱寤轰竴涓猣tl妯℃澘銆傚皢涓婇潰鐨剋ord鏂囨。淇濆瓨涓簍est.xml鏍煎紡銆備繚瀛樺悗锛屽彲浠ョ敤娴忚鍣ㄦ墦寮€test.xml鏂囦欢锛屾煡鐪嬫垜浠殑鍗犱綅绗︽槸鍚﹁鑼冦€傛敞鎰忥細鏈夋椂鍊欏崰浣嶇鏄細鍑虹幇琚垎寮€鐨勬儏鍐碉紝濡備笅鍥撅細鍥剧墖鐨勬浛鎹㈠拰涓婇潰鐨勬弿杩颁竴鏍凤紝鍥剧墖鏄竴闀夸覆base64锛屽涓嬪浘锛氱劧鍚庢妸鏂囦欢鏀惧埌resources/templates鐩綍涓嬨€傛斁鍦╮esource鐩綍鍗冲彲锛屽叾浣欑洰褰曞彲鏍规嵁闇€瑕佽嚜瀹氫箟銆傛敞鎰忚瀵瑰簲WordUtil.java涓殑鐩綍銆傜紪鍐欑▼搴忛€氱敤瀵煎嚭宸ュ叿绫诲湪util鍖呬笅鍒涘缓WordUtil.java宸ュ叿绫伙紝馃憞packagecom.maple.demo.util;importfreemarker.template.Configuration;importfreemarker.template.Template;importfreemarker.template銆俆emplateException;importjava.io.*;importjava.nio.charset.StandardCharsets;importjava.util.Map;importstaticfreemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS;/***@authorXiaoXiaofeng*@date2022/7/27*@seehttps://www.xiaoxiaofeng.com*/publicclassWordUtil{privatefinalConfiguration閰嶇疆;publicWordUtil(){configuration=newConfiguration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS);閰嶇疆.setDefaultEncoding("UTF-8");}publicvoidcreateWord(MapdataMap,StringtemplateName,StringfileName){//妯℃澘鏂囦欢璺緞configuration.setClassForTemplateLoading(this.getClass(),"/templates");妯℃澘t=null锛泃ry{//鑾峰彇妯℃澘鏂囦欢t=configuration.getTemplate(templateName,"UTF-8");}catch(IOExceptione){e.printStackTrace();}//瀵煎嚭鏂囦欢FileoutFile=newFile(fileName);try(Writerout=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(outFile),StandardCharsets.UTF_8))){if(t!=null){//鐢ㄥ~鍏呮暟鎹~鍏呮ā鏉挎枃浠跺苟杈撳嚭鍒扮洰鏍囨枃浠秚.澶勭悊锛堟暟鎹槧灏勶紝杈撳嚭锛夛紱}}catch(IOException|TemplateExceptione1){e1.printStackTrace();}}}璇锋眰鎺ュ彛鍦╟ontroller鍖呬笅鍒涘缓TestWordController.java锛屼娇鐢ㄤ笂绡囨枃绔犵殑鏂囦欢浼犺緭base64锛屽弬鑰冩枃绔燵15.Base64涓庢枃浠朵簰鎹()packagecom.maple.demo.controller;importcom.maple.demo.util.Base64Util锛涘鍏om.maple.demo.util.WordUtil锛涘鍏o.swagger.annotations.Api锛涘鍏ラ緳鐩矝銆侫llArgsConstructor锛涘鍏rg.springframework.web.bind.annotation.GetMapping锛涘鍏rg.springframework.web.bind.annotation.Request鏄犲皠锛涘鍏rg.springframework.web.bind.annotation.RestController锛涘鍏avax.servlet.ServletOutputStream锛涘鍏avax.servlet.http.HttpServletRequest锛涘鍏avax.servlet.http.HttpServletResponse锛涘鍏ava.io.File锛涘鍏ava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.net.URLEncoder;importjava.util.*;/***@authorXiaoXiaofeng*@date2022/7/27*@鍙傝https://www.xiaoxiaofeng.com*/@RestController@AllArgsConstructor@RequestMapping("/example")@Api(tags="绀轰緥婕旂ず-鏍规嵁妯℃澘鐢熸垚word")publicclassTestWordController{/***鏂囧瓧澶勭悊:*鐩存帴浣跨敤涓棿鐨?{}浣滀负鏇挎崲鐨勫瓧娈靛悕*濡傛灉鐩存帴鍦╳ord涓畾涔?{title}锛屽垯杞垚xml鏈夋椂鍙兘浼氳涓€浜涗唬鐮侀殧寮€銆傝繖鏃跺€欏彧闇€瑕佺敤word鎵撳紑xml锛岄噸鏂拌緭鍏ヤ竴閬嶅唴瀹瑰嵆鍙€?鍙互鐢ㄦ祻瑙堝櫒鎵撳紑xml鏌ョ湅鑷繁瀹氫箟鐨?{}鐨勫唴瀹规槸鍚﹂兘鍦ㄤ竴璧凤紝鏄惁鐢ㄧ紪鐮佸垎闅斻€?鍥剧墖澶勭悊锛?闇€瑕佸湪word鏂囨。妯℃澘涓彃鍏ヤ竴寮犲浘鐗?word杞瑇ml鍚庯紝鎵撳紑xml锛屾垜浠殑鍥剧墖浼氳浆鎴愪竴闀挎鐨刡ase64銆?鎴戜滑鍙互鐢ㄦ垜浠殑${pic}鏇挎崲base64锛宲ic鏄瓧娈靛悕锛屽彲浠ヤ换鎰忔浛鎹?鍒楄〃澶勭悊锛?闇€瑕佸湪word鏂囨。妯℃澘涓彃鍏ヤ竴涓〃鏍?鎵惧埌绗簩涓?w:tr>锛屽湪鍦ㄥ墠闈㈡坊鍔?#listpeopleListaslist>锛屽叾涓璸eopleList涓轰紶鍏ュ垪琛ㄧ殑闆嗗悎鍚嶏紝list涓哄埆鍚嶃€?鍙傛暟鍊间负锛?{list.name}鍍忚繖鏍枫€?鍦?/w:tr>涓?w:tr>閰嶅鍚庢坊鍔?/#list>銆傝娉曞悓freemaker*/鐨刦or寰幆璇硶涓€鏍稝GetMapping("/exportWord")publicvoidexportWord(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{//1.鍒涘缓涓存椂鏂囦欢澶筍tringrootPath=request.getSession().getServletContext().getRealPath("/");StringfileName=UUID.randomUUID().toString().replace("-","");//澶勭悊鍥剧墖淇℃伅锛屽皢鍥剧墖杞负base64瀛楃涓睩ileimageFile=newFile("D:\\xiaoxiaofeng.jpg");Stringbase64=Base64Util.fileToBase64(imageFile);//澶勭悊琛ㄧ殑鏁版嵁淇℃伅List