生成可编辑的pdf(可java代码动态赋值)

pdf文件动态签章以及生成动态信息

步骤1.conversionItextPdf(将pdf转换成编码软件为Itext的pdf)
代码如下

public void conversionItextPdf() throws Exception {
        String newfile = "D:\\生成编码软件为Itext格式的PDF.pdf";
        String[] files = {"D:\\其他编码软件类型的PDF.pdf", ""};
        Document document = new Document(new PdfReader(files[0]).getPageSize(1));
        try {
            document = new Document(new PdfReader(files[0]).getPageSize(1));
            PdfCopy copy = new PdfCopy(document, new FileOutputStream(newfile));
            document.open();
            for (int i = 0; i < files.length; i++) {
                PdfReader reader = new PdfReader(files[i]);
                int n = reader.getNumberOfPages();
                for (int j = 1; j <= n; j++) {
                    document.newPage();
                    PdfImportedPage page = copy.getImportedPage(reader, j);
                    copy.addPage(page);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            document.close();
        }
    }

步骤2.用adobe软件为pdf添加表单域

在这里插入图片描述
在这里插入图片描述
步骤3.java代码给表单域赋值

public Map<String, String> convertMap(MakeLoanRequest request) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.putAll(getDate());
        map.put("name", "张三");
        map.put("idCardNum", "320345199020562356");
        return map;
    }
public InputStream generationContract(String templatePath, Map<String, String> map) {
        try {
            PdfReader reader = new PdfReader(templatePath);// 读取pdf模板
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            PdfStamper stamper = new PdfStamper(reader, bos);
            // 输出流
            AcroFields form = stamper.getAcroFields();
            Map<String, AcroFields.Item> fieldMap = form.getFields();
            for (Map.Entry<String, AcroFields.Item> entry : fieldMap.entrySet()) {
                String name = entry.getKey();
                form.setField(name, map.get(name));
            }
            //如果为false那么生成的PDF文件还能编辑,一定要设为true
            stamper.setFormFlattening(true);
            stamper.close();
            return byte2Input(bos.toByteArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

1.此处是将pdf赋值后以输入流的形式返回,可根据自己需要做修改
2.步骤1中,将pdf设置成编码软件为Itext的格式,标红的PdfStamper PdfStamper(import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfStamper;)才能读取到pdf中的表单域

如果有遇到不理解的,可加QQ:467387096 一起讨论

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值