一、创建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 }