<!--pdf start--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/font-asian --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>font-asian</artifactId> <version>7.1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <!--pdf end-->
準備表單 填寫對應java字段java
@GetMapping(value = "/makePdf") public AdusResponse makePdf() { Map<String,Object> params = new HashMap<>(); params.put("id",298); ReliefBillEntity entity = reliefBillFacade.selectReliefBillEntity(params); // 模板路徑 String templatePath = "C:\\Users\\Administrator\\Desktop\\test.pdf"; // 生成的新文件路徑 String newPDFPath = "C:\\Users\\Administrator\\Desktop\\b.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath);// 輸出流 reader = new PdfReader(templatePath);// 讀取pdf模板 bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); form.setField("reliefNumber",entity.getReliefNumber()); form.setField("supplierId",entity.getSupplierId().toString()); form.setField("reliefDate",entity.getReliefDate().toString()); form.setField("accPeriod",entity.getAccPeriod()); form.setField("orderNumber",entity.getReliefNumber()); form.setField("SKC",entity.getAccPeriod()); form.setField("chksheetId",entity.getChksheetId().toString()); form.setField("reliefType",entity.getReliefType().getDesc()); form.setField("oneType",entity.getOneType()); form.setField("twoType",entity.getOneType()); form.setField("reliefTypeDesc",entity.getReliefType().getDesc()); form.setField("number",entity.getOneType()); form.setField("price",entity.getOneType()); form.setField("reliefMoney",entity.getReliefMoney().toString()); form.setField("curCode",entity.getCurCode()); form.setField("auditor",entity.getAccPeriod()); form.setField("addTime",entity.getAddTime().toString()); form.setField("auditor2",entity.getAccPeriod()); stamper.setFormFlattening(false);// 若是爲false那麼生成的PDF文件還能編輯,必定要設爲true stamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); } catch (Exception e) { System.out.println(1); } return new AdusResponse(SysConstants.ResponseCode.SUCCESS, "", null); }
最後提供模板文件與生成後的pdf文件截圖服務器
具體項目中須要注意資源的關閉,統計生成的文件能夠放置文件服務器上統一提供連接地址進行下載等等。這裏僅僅初步更具模板生成含數據的pdf文件。app
這種方式的缺點:不夠靈活,模板文件較爲死板,不便於拓展。優勢:能快速更具模板文件實現功能,難度低優化