java使用itext编辑pdf

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

猜你喜欢

转载自www.cnblogs.com/ruowei/p/11419358.html