1、poi-tl官網地址
http://deepoove.com/poi-tl/
2、引入poi-tl的依賴
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>
3、定義word模板
釋義:?為開始標簽,/為結束標簽,@picture為渲染每一個圖片
4、Java測試代碼
@RequestMapping("/test")
@RestController
public class TestController {private static final String PICTURE_PATH = "D:\\test\\picture\\";@GetMapping("/download")public void download(HttpServletResponse response) throws IOException {//定義存儲集合Map<String, Object> pictureMap= new HashMap<>();//創建并得到圖片集合,設置圖片大小List<Map<String, PictureRenderData>> pictureList = createPictureList(100, 100);pictureMap.put("pictureList", pictureList);//通過XWPFTemplate處理XWPFTemplate document = XWPFTemplate.compile(new ClassPathResource("templates/test.docx").getFile()).render(pictureMap);//返回數據設置setResponseHeader(response);//輸出流并關閉OutputStream os = response.getOutputStream();document.write(os);os.close();}private List<Map<String, PictureRenderData>> createPictureList(int width, int height) {List<Map<String, PictureRenderData>> list = new ArrayList<>();//添加多張圖片到集合list.add(createPictureMap("Banner (1).jpg", width, height));list.add(createPictureMap("Banner (10).jpg", width, height));list.add(createPictureMap("Banner (100).jpg", width, height));return list;}private Map<String, PictureRenderData> createPictureMap(String pictureName, int width, int height) {Map<String, PictureRenderData> map = new HashMap<>();//創建PictureRenderData對象并設置其大小//Pictures還有其他方法,如Pictures.ofStream()流處理,可根據自己的需求及文檔替換map.put("picture", Pictures.ofLocal(PICTURE_PATH + pictureName).size(width, height).create());return map;}private void setResponseHeader(HttpServletResponse response) {response.reset();response.setContentType("application/octet-stream");response.setHeader("Content-disposition","attachment;filename=picture_word_" + System.currentTimeMillis() + ".docx");}
}
5、測試結果