一、創建pdf模板
使用PDFelement制作pdf模板(數據域的名稱對應后面插入的key)
二、導入maven依賴
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
三、插入數據和圖片到pdf模板
1 Map<String, Object> data;//要插入的數據 2 //初始化itext 3 //設置編碼 4 BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); 5 PdfReader pdfReader=new PdfReader(“pdf模板文件路徑”); 6 PdfStamper pdfStamper=new PdfStamper(pdfReader, new FileOutputStream(“輸出pdf文件路徑”)); 7 AcroFields form = pdfStamper.getAcroFields(); 8 form.addSubstitutionFont(baseFont); 9 10 //寫入數據 11 for(String key:data.keySet()){ 12 String value=data.get(key).toString(); 13 //key對應模板數據域的名稱 14 form.setField(key,value); 15 } 16 17 //添加圖片 18 int pageNo = form.getFieldPositions("img").get(0).page; 19 Rectangle signRect = form.getFieldPositions("img").get(0).position; 20 float x = signRect.getLeft(); 21 float y = signRect.getBottom(); 22 Image image = Image.getInstance("圖片路徑"); 23 PdfContentByte under = pdfStamper.getOverContent(pageNo); 24 //設置圖片大小 25 image.scaleAbsolute(signRect.getWidth(), signRect.getHeight()); 26 //設置圖片位置 27 image.setAbsolutePosition(x, y); 28 under.addImage(image); 29 30 //設置不可編輯 31 pdfStamper.setFormFlattening(true); 32 pdfStamper.close();
PS:合並多個pdf成一個
1 //先刪除之前的all.pdf 2 String filePath="all.pdf"; 3 File file=new File(filePath); 4 file.delete(); 5 //要合並的所有pdf的路徑 6 List<String> fileList; 7 //all.pdf保存路徑 8 String savepath="all.pdf"; 9 Document document = null; 10 try { 11 document = new Document(new PdfReader(fileList.get(0)).getPageSize(1)); 12 PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath)); 13 document.open(); 14 for (int i = 0; i < fileList.size(); i++) { 15 PdfReader reader = new PdfReader(fileList.get(i)); 16 int n = reader.getNumberOfPages();// 獲得總頁碼 17 for (int j = 1; j <= n; j++) { 18 document.newPage(); 19 PdfImportedPage page = copy.getImportedPage(reader, j);// 從當前Pdf,獲取第j頁 20 copy.addPage(page); 21 } 22 } 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } catch (DocumentException e) { 26 e.printStackTrace(); 27 } finally { 28 if (document != null) { 29 document.close(); 30 } 31 }