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

共 2964字,需浏览 6分钟

 ·

2021-11-30 07:14

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

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

5ac406eb470420bb239eb7d62c471d79.webp


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

8165913a6429a49fc9e2c99c7f47f28d.webp

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

6c7bbc3470cdf014800400b19ea9c182.webp

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

c60c8a00b3b7e48ebee0504ef523ab3e.webp


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

引入依赖

 1<dependency>
2    <groupId>com.itextpdfgroupId>
3    <artifactId>itextpdfartifactId>
4    <version>5.5.13version>
5dependency>
6
7<dependency>
8    <groupId>com.itextpdfgroupId>
9    <artifactId>itext-asianartifactId>
10    <version>5.2.0version>
11dependency>

工具类

 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<StringString> formMap, Map<StringString> 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 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<StringString> 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<StringString> 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}

准备一张手写的签名图片

35ab620767c5024f8b965acfc5b69e62.webp

运行程序

db7a4e627f1203505de22622aa450494.webp


4482c5226b2ca114afd3847c8f089a36.webp

喜欢,在看

浏览 80
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报