根据 PDF 模板产生各种电子订单
在网上找了份委托申请书的 word 文档,首先将其转成 pdf
然后使用 Adobe Acrobat
软件打开,然后创建一个表单,打开 acrobat, 点击工具,点击准备表单
然后选择刚准备好的 pdf 文档
点击下面的图标添加文本框表单,并给这个输入框写上一个变量名
把需要填上内容的地方一 一的都放上表单,弄好之后。如下图
最后保存,这样就产生了一个 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<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 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}
准备一张手写的签名图片
运行程序
喜欢,在看
评论