日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 模板 word转pdf 可分页 带图片

發(fā)布時(shí)間:2024/3/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 模板 word转pdf 可分页 带图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java 模板 word轉(zhuǎn)pdf 可分頁 帶圖片

之前寫過一個(gè)簡單的案例,但是在項(xiàng)目中完全不能滿足客戶的需求,所以重新用啦一種方式來寫,采用了word轉(zhuǎn)換pdf的方式,這種經(jīng)過不斷研究,滿足了可分頁,列表循環(huán)數(shù)據(jù)可帶圖片,可以說很完善了。

第一步:先來編寫word自定義模板以及轉(zhuǎn)換模板,轉(zhuǎn)換模板可以直接是客戶發(fā)過來的樣式模板,自定義模板呢,就是帶java中賦值的占位符字段。

下面舉例幾個(gè):

單個(gè):

列表:無邊框

列表:有邊框

列表:帶圖片 單個(gè)圖片 日期格式

@ApiOperation(value = "導(dǎo)出pdf報(bào)告")@GetMapping("/exportPdf/{id}")public void exportPdf(HttpServletResponse response, @PathVariable Integer id) {mLegalCompanyService.exportPdf(response, id);} //兩個(gè)模板 寫模板docx 轉(zhuǎn)換模板docx@Value("${upload.dir}")String ulr;//word模板路徑@Value("${imgUrl.url}")String path;//圖片路徑/*** 根據(jù) 企業(yè)id生成 word* word 轉(zhuǎn)換PDF** @param response* @param id*/@Overridepublic void exportPdf(HttpServletResponse response, Integer id) {//本地調(diào)試路徑//if (!System.getProperty("os.name").toLowerCase().contains("win")) {// ulr = "/Users/xxx/Desktop/files/項(xiàng)目/轉(zhuǎn)換dpf/";//}long old = System.currentTimeMillis();LegalCompany legalCompany = this.getById(id);if (ObjectUtils.isEmpty(legalCompany)) {return;}HashMap<String, Object> map = new HashMap<>();//頭部標(biāo)題map.put("title", legalCompany.getCompanyName());//報(bào)告時(shí)間map.put("date1", "第一次檢查");// 評(píng)估依據(jù)addBasis(map, legalCompany);// 現(xiàn)場(chǎng)檢查發(fā)現(xiàn)的問題addRectifyList(map, legalCompany);//日期map.put("date", new Date());//簽名圖片if (StringUtils.isNotEmpty(legalCompany.getSignaturePicture())) {ImageEntity image = new ImageEntity();image.setHeight(842);image.setWidth(595);//這里我的路徑需要拼接,只要圖片路徑能訪問就可以。image.setUrl(path + legalCompany.getSignaturePicture());image.setType(ImageEntity.URL);map.put("SignaturePicture", image);}try {XWPFDocument doc = WordExportUtil.exportWord07(ulr + "/寫模板.docx", map);FileOutputStream fos = new FileOutputStream(ulr + "/轉(zhuǎn)換模板.docx");doc.write(fos);fos.close();// 開始轉(zhuǎn)換pdfInputStream inputStream = new FileInputStream(ulr + "/轉(zhuǎn)換模板.docx");OutputStream outputStream = response.getOutputStream();response.setCharacterEncoding("utf-8");response.setHeader("content-type", "application/octet-stream");String fileName = URLEncoder.encode(legalCompany.getCompanyName() + "-" + TimeUtils.formatDate(inspectData, TimeUtils.DATE_FORMAT_DATEONLY) + "-" + "檢查報(bào)告" + ".pdf", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");// 驗(yàn)證License 若不驗(yàn)證則轉(zhuǎn)化出的pdf文檔會(huì)有水印產(chǎn)生if (!AsposeWordsUtils.getLicense()) {return;}//要轉(zhuǎn)換的word文件Document doct = new Document(inputStream);doct.save(outputStream, SaveFormat.PDF);long now = System.currentTimeMillis();//轉(zhuǎn)化用時(shí)log.info("共耗時(shí):" + ((now - old) / 1000.0) + "秒");outputStream.flush();outputStream.close();} catch (IOException e) {log.info("IOException==>異常:{}==>{}", e);} catch (Exception e) {log.info("Exception==>異常:{}==>{}", e);}}/*** 評(píng)估依據(jù)** @param map* @param legalCompany*/private void addBasis(HashMap<String, Object> map, LegalCompany legalCompany) {List<String> list = Lists.newArrayList();//根據(jù)企業(yè)id查詢檢查完畢最后一條數(shù)據(jù)LegalCheckTheRecord checkTheRecord = legalCheckTheRecordService.getByCompanyId(legalCompany.getCompanyId());List<BasisInfo> basisInfoList = basisInfoService.findListByBasisId(checkTheRecord.getBasisId());if (CollectionUtils.isNotEmpty(basisInfoList)) {for (int i = 0; i < basisInfoList.size(); i++) {list.add(basisInfoList.get(i).getBasisInfoName());}map.put("basis", list);}}/*** 設(shè)置 “現(xiàn)場(chǎng)檢查發(fā)現(xiàn)的問題及整改情況”** @param map* @param legalCompany*/private void addRectifyList(HashMap<String, Object> map, LegalCompany legalCompany) {List<HashMap<String, Object>> list = new ArrayList<>();// 數(shù)據(jù)List<LegalInspect> legalInspects = legalInspectService.selectList(legalCompany.getCompanyId);if (CollectionUtils.isNotEmpty(legalInspects)) {// 數(shù)據(jù) for 循環(huán)for (int i = 1; i <= legalInspects.size(); i++) {LegalInspect legalInspect = legalInspects.get(i - 1);HashMap<String, Object> mapData = new HashMap<>();mapData.put("id", isNull(i));mapData.put("problem", legalInspect.getProblem());mapData.put("levelId", legalInspect.getLevelId().equals(1) ? "一般隱患" : "重大隱患");//檢查圖片if (StringUtils.isNotEmpty(legalInspect.getLivePhotos())) {//這里我的路徑需要拼接,只要圖片路徑能訪問就可以。ImageEntity image = new ImageEntity(path + legalInspect.getLivePhotos(), 100, 100);mapData.put("livePhotos", image);}mapData.put("isRectify", legalInspect.getIsRectify().equals(1) ? "未整改" : "已整改");//整改圖片if (StringUtils.isNotEmpty(legalInspect.getFinalPhotos())) {ImageEntity image = new ImageEntity(path + legalInspect.getFinalPhotos(), 100, 100);mapData.put("finalPhotos", image);}mapData.put("measure", legalInspect.getMeasure());mapData.put("safetyPrincipal", legalCompany.getSafetyPrincipal());if (null != periodMap && periodMap.containsKey(legalInspect.getDeadlineId())) {mapData.put("deadlineNum", periodMap.get(legalInspect.getDeadlineId()).getDeadlineNum() + "天");}//檢查次數(shù)Long between = DateUtiles.between(legalInspect.getSubmitTime().getTime(), System.currentTimeMillis());int num = 1;if (between > legalCompany.getCycleDate()) {num += between / legalCompany.getCycleDate();}mapData.put("num", "第" + num + "次檢查");list.add(mapData);}}map.put("inspect", list);} // AsposeWordsUtils類 public class AsposeWordsUtils { /*** 判斷是否有授權(quán)文件 如果沒有則會(huì)認(rèn)為是試用版,轉(zhuǎn)換的文件會(huì)有水印*/public static boolean getLicense() {boolean result = false;try {InputStream is = AsposeWordsUtils.class.getClassLoader().getResourceAsStream("license.xml");License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;} }

pdf下載后:





這個(gè)報(bào)告文件頁碼很長,我只截取了一小部分,代碼很多,但是只截取了一些,可能沒辦法提供全,有些涉及企業(yè)機(jī)密,要是有哪不懂,可以評(píng)論留言,如果有需要可以提供其他的給你們參考。

這個(gè)是不限頁面的,單圖片 列表圖片都可以下載下來。

總結(jié)

以上是生活随笔為你收集整理的java 模板 word转pdf 可分页 带图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。