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

      感谢两位大佬。

  • 相关阅读:
    (拿来主义) SpringCloud | 第四篇: 断路器(Hystrix)
    (拿来主义) SpringCloud | 第三篇: 服务消费者(Feign)
    (拿来主义) SpringCloud | 第二篇: 服务消费者(rest+ribbon)
    (拿来主义) SpringCloud | 第一篇: 服务的注册与发现(Eureka)
    (拿来主义-10) Spring Boot中使用Swagger2构建强大的RESTful API文档(五)
    (拿来主义-9) Spring Boot构建RESTful API与单元测试(四)
    (拿来主义-8) Spring Boot属性配置文件详解(三)
    (拿来主义-7) Spring Boot工程结构推荐(二)
    springMVC配置文件路径问题
    实现可用的插件系统
  • 原文地址:https://www.cnblogs.com/lihongjunjava/p/14825273.html
Copyright © 2011-2022 走看看