不會吧不會吧,還有開發不會Java填充PDF模板資料的,趕緊看看吧
阿新 • • 發佈:2020-12-12
思路
根據業務需求,獲取實際業務資料,藉助itext庫功能,將業務資料填充入提前製作好的PDF模板中
操作步驟
- 製作PDF模板:提前下載好Adobe Acrobat Pro DC
- 效果展示
準備PDF,如下圖
編輯PDF
準備表單
設定字型
設定多行
模板表單標籤
標籤繫結具體業務資料
- pom依賴
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency>
- 具體實現
private ByteArrayOutputStream getYearData() { ClassPathResource classPathResource = new ClassPathResource("template/pdf-template.pdf"); PdfReader reader; ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { reader = new PdfReader(classPathResource.getStream()); bos = new ByteArrayOutputStream(); PdfStamper stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); Map<String, String> map = new HashMap<>(); map.put("changeTag1", ReportConstant.CHOOSE_FLAG); map.put("changeTag2", ReportConstant.CHOOSE_FLAG); map.put("passport0", "88484695274732"); map.put("passport1", "88484695274733"); map.put("signDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS)); map.put("signDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS)); map.put("validDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM)); map.put("validDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM)); map.put("orgName0", "賢一坊科技有限公司"); map.put("orgName1", "賢一坊科技有限公司"); map.put("remark0", "這是一個備註,裡面的內容並不是無限長"); map.put("remark1", "這是一個備註,裡面的內容並不是無限長"); this.fillPdfCellForm(map, form); // true代表生成的PDF檔案不可編輯 stamper.setFormFlattening(true); stamper.close(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } return bos; } private void fillPdfCellForm(Map<String, String> map, AcroFields form) throws IOException, DocumentException { for (Map.Entry entry : map.entrySet()) { String key = (String) entry.getKey(); String value = (String) entry.getValue(); form.setField(key, value); } }
效果展示
最後
我這裡準備了一線大廠面試資料和我原創的超硬核PDF技術文件,以及我為大家精心準備的多套大廠面試題(不斷更新中),需要的朋友可以關注我的公眾號:前程有光,獲取!希望大家都能找到心儀的工作!