根据 PDF 模板产生各种电子订单

这篇博客介绍了如何利用Adobe Acrobat创建PDF表单模板,然后使用Java的iTextPDF库来填充表单字段并插入图片,生成定制化的PDF文件。主要步骤包括将Word文档转换为PDF,使用Adobe Acrobat创建表单,以及通过iTextPDF读取模板、设置字段值和插入图片。
摘要由CSDN通过智能技术生成

bef3449e1ae66332704bc94861be72b9.png

在网上找了份委托申请书的 word 文档,首先将其转成 pdf

然后使用 Adobe Acrobat 软件打开,然后创建一个表单,打开 acrobat, 点击工具,点击准备表单

ffcfde0fff194fb45d7ac05ddcae9297.png

然后选择刚准备好的 pdf 文档

aa93e1b07ebd72bb8a2fe448fb6e8361.png

点击下面的图标添加文本框表单,并给这个输入框写上一个变量名

7e88e8e9334fc50b71ffda03728fa4c0.png

把需要填上内容的地方一 一的都放上表单,弄好之后。如下图

96c96abaa80e016f1a769689b71cba80.png

最后保存,这样就产生了一个 PDF 模板文件。

引入依赖

1<dependency>
 2    <groupId>com.itextpdf</groupId>
 3    <artifactId>itextpdf</artifactId>
 4    <version>5.5.13</version>
 5</dependency>
 6
 7<dependency>
 8    <groupId>com.itextpdf</groupId>
 9    <artifactId>itext-asian</artifactId>
10    <version>5.2.0</version>
11</dependency>

工具类

1import com.itextpdf.text.Image;
 2import com.itextpdf.text.Rectangle;
 3import com.itextpdf.text.pdf.AcroFields;
 4import com.itextpdf.text.pdf.PdfContentByte;
 5import com.itextpdf.text.pdf.PdfReader;
 6import com.itextpdf.text.pdf.PdfStamper;
 7
 8import java.io.FileInputStream;
 9import java.io.FileOutputStream;
10import java.io.InputStream;
11import java.util.List;
12import java.util.Map;
13
14public class PDFUtil {
15
16    /**
17     * @param templatePath pdf模板文件地址
18     * @param targetPath   生成的pdf文件地址
19     * @param formMap      pdf中要插入的内容
20     * @param imagePathMap pdf中要插入的图片地址
21     */
22    public static void generatorPdf(String templatePath, String targetPath, Map<String, String> formMap, Map<String, String> imagePathMap) {
23        try (InputStream input = new FileInputStream(templatePath)) {
24            PdfReader reader = new PdfReader(input);
25            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPath));
26            stamper.setFormFlattening(true); // 让pdf不可在编辑
27            // 提取pdf中的表单
28            AcroFields form = stamper.getAcroFields();
29            for (String key : formMap.keySet()) {
30                form.setField(key, formMap.get(key));
31            }
32
33            for (String key : imagePathMap.keySet()) {
34                // 通过域名获取所在页和坐标,左下角为起点
35                List<AcroFields.FieldPosition> imageFieldPositions = form.getFieldPositions(key);
36                int pageNo = imageFieldPositions.get(0).page;
37                Rectangle rect = imageFieldPositions.get(0).position;
38                // 读图片
39                Image image = Image.getInstance(imagePathMap.get(key));
40                // 根据域的大小缩放图片
41                image.scaleToFit(rect.getWidth(), rect.getHeight());
42                image.setAbsolutePosition(rect.getLeft(), rect.getBottom());
43                // 获取操作的页面
44                PdfContentByte canvas = stamper.getOverContent(pageNo);
45                canvas.addImage(image);
46            }
47
48            stamper.close();
49            reader.close();
50        } catch (Exception e) {
51            e.printStackTrace();
52        }
53    }
54}

验证

1public static void main(String[] args) {
 2    Map<String, String> formMap = new HashMap<>();
 3    formMap.put("name", "张三");
 4    formMap.put("name2", "李四");
 5    formMap.put("id_card", "987654321987654321");
 6    formMap.put("id_card2", "123456789123456789");
 7    formMap.put("year", "2021");
 8    formMap.put("month", "02");
 9    formMap.put("day", "25");
10    Map<String, String> imagePathMap = new HashMap<>();
11    imagePathMap.put("image", "D:\\sign.jpg");
12    PDFUtil.generatorPdf(
13        "d:\\test_template.pdf",
14        "d:\\new.pdf",
15        formMap,
16        imagePathMap
17    );
18}

准备一张手写的签名图片

38d15b19cc210997687b7e15696702e6.png

运行程序

84b6e1e730bcc75386245edc52d9063b.png

7e9b64b4e73fa8473919ed7173ae05a8.png

喜欢,在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值