zoukankan      html  css  js  c++  java
  • Java修改PDF文件内容

    1. 下载工具

        链接:https://pan.baidu.com/s/1Ta8iokGyPhJOnetGqPwtUg
        提取码:e0m3

        压缩文件解压密码:www.downza.cn

        使用 Adobe Acrobat DC打开想要修改的PDF文件,点击【准备表单】

      

        

    上图中的fill_1,就是可以修改的文本域key,双击可以重命名

        2.导入使用的jar包

      

           <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.5</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency> 
    

      3. 复制下面代码,修改文件地址

      

    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.*;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class Demo {
    
        public static void main(String[] args) throws IOException, DocumentException {
            Map<String, Object> data = new HashMap<>();//要插入的数据
            data.put("fill_1", "隔壁老王");
            data.put("fill_2", "隔壁老李");
            //初始化itext
            //设置编码
            BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            //要修改的模本文件:E:谷歌下载	emplat.pdf
            PdfReader pdfReader = new PdfReader("E:\谷歌下载\templat.pdf");
            //修改之后输出文件地址 E:谷歌下载update_tempalte.pdf
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("E:\谷歌下载\update_tempalte.pdf"));
            AcroFields form = pdfStamper.getAcroFields();
            form.addSubstitutionFont(baseFont);
    
            //写入数据
            for (String key : data.keySet()) {
                String value = data.get(key).toString();
                //key对应模板数据域的名称
                form.setField(key, value);
            }
    
            //还要将图片添加到指定的key文本域中
            int pageNo = form.getFieldPositions("fill_11_2").get(0).page;
            Rectangle signRect = form.getFieldPositions("fill_11_2").get(0).position;
            float x = signRect.getLeft();
            float y = signRect.getBottom();
            //要添加的图片地址 C:UsersAdministratorDesktop6.jpeg
            Image image = Image.getInstance("C:\Users\Administrator\Desktop\6.jpeg");
            PdfContentByte under = pdfStamper.getOverContent(pageNo);
            //设置图片大小
            image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
            //设置图片位置
            image.setAbsolutePosition(x, y);
            under.addImage(image);
    
            //设置不可编辑
            pdfStamper.setFormFlattening(true);
            pdfStamper.close();
        }
    
    }
    

      

      参考地址:https://www.cnblogs.com/mingyueyy/p/14821398.html

           https://www.cnblogs.com/ruowei/p/11419358.html

      感谢两位大佬。

  • 相关阅读:
    数据结构与算法系列——排序(6)_树形选择排序
    数据结构与算法系列——排序(7)_堆排序
    数据结构与算法系列——排序(5)_简单选择排序
    数据结构与算法系列——排序(4)_Shell希尔排序
    数据结构与算法系列——排序(3)_折半插入排序
    数据结构与算法系列——排序(2)_直接插入排序
    数据结构与算法系列——排序(1)_概述
    Java高级开发_性能优化的细节
    图形推理
    美团点评面试20190515
  • 原文地址:https://www.cnblogs.com/lihongjunjava/p/14825273.html
Copyright © 2011-2022 走看看