在网上找了份委托申请书的 word 文档,首先将其转成 pdf
然后使用 Adobe Acrobat
软件打开,然后创建一个表单,打开 acrobat, 点击工具,点击准备表单
然后选择刚准备好的 pdf 文档
点击下面的图标添加文本框表单,并给这个输入框写上一个变量名
把需要填上内容的地方一 一的都放上表单,弄好之后。如下图
最后保存,这样就产生了一个 PDF 模板文件。
引入依赖
代码语言:javascript
复制
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
工具类
代码语言:javascript
复制
import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;public class PDFUtil {
/** * @param templatePath pdf模板文件地址 * @param targetPath 生成的pdf文件地址 * @param formMap pdf中要插入的内容 * @param imagePathMap pdf中要插入的图片地址 */ public static void generatorPdf(String templatePath, String targetPath, Map<String, String> formMap, Map<String, String> imagePathMap) { try (InputStream input = new FileInputStream(templatePath)) { PdfReader reader = new PdfReader(input); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPath)); stamper.setFormFlattening(true); // 让pdf不可在编辑 // 提取pdf中的表单 AcroFields form = stamper.getAcroFields(); for (String key : formMap.keySet()) { form.setField(key, formMap.get(key)); } for (String key : imagePathMap.keySet()) { // 通过域名获取所在页和坐标,左下角为起点 List<AcroFields.FieldPosition> imageFieldPositions = form.getFieldPositions(key); int pageNo = imageFieldPositions.get(0).page; Rectangle rect = imageFieldPositions.get(0).position; // 读图片 Image image = Image.getInstance(imagePathMap.get(key)); // 根据域的大小缩放图片 image.scaleToFit(rect.getWidth(), rect.getHeight()); image.setAbsolutePosition(rect.getLeft(), rect.getBottom()); // 获取操作的页面 PdfContentByte canvas = stamper.getOverContent(pageNo); canvas.addImage(image); } stamper.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } }
}
验证
代码语言:javascript
复制
public static void main(String[] args) {
Map<String, String> formMap = new HashMap<>();
formMap.put("name", "张三");
formMap.put("name2", "李四");
formMap.put("id_card", "987654321987654321");
formMap.put("id_card2", "123456789123456789");
formMap.put("year", "2021");
formMap.put("month", "02");
formMap.put("day", "25");
Map<String, String> imagePathMap = new HashMap<>();
imagePathMap.put("image", "D:\\sign.jpg");
PDFUtil.generatorPdf(
"d:\\test_template.pdf",
"d:\\new.pdf",
formMap,
imagePathMap
);
}
准备一张手写的签名图片
运行程序