Java基于iText7如何将源PDF签名写入目标PDF的PdfButtonFormField域
你使用的是iText7库的话,你已经完成了签名页转FormXObject的核心步骤,接下来只需要把这个对象设置到表单域,再调整显示适配即可,完整实现如下:
完整实现代码
import com.itextpdf.forms.fields.PdfButtonFormField; import com.itextpdf.forms.PdfAcroForm; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import java.io.ByteArrayInputStream; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class SignFillDemo { // 替换为你自己的签名PDF路径、目标模板路径、输出路径 private static final String SIGNATURE_PDF = "path/to/your/sign.pdf"; private static final String TEMPLATE_PDF = "path/to/your/template.pdf"; private static final String OUTPUT_PDF = "path/to/your/output.pdf"; public static void main(String[] args) throws Exception { // 1. 加载目标模板PDF PdfDocument pdfDoc = new PdfDocument(new PdfReader(TEMPLATE_PDF), new PdfWriter(OUTPUT_PDF)); PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true); // 获取签名对应的图片表单域 PdfButtonFormField signatureField = (PdfButtonFormField) form.getField("Image2_af_image"); // 2. 加载签名PDF并转换为FormXObject File signPdfFile = new File(String.valueOf(Paths.get(SIGNATURE_PDF))); ByteArrayInputStream signByteArray = new ByteArrayInputStream(Files.readAllBytes(signPdfFile.toPath())); final PdfDocument signatureDoc = new PdfDocument(new PdfReader(signByteArray)); PdfFormXObject signXObject = signatureDoc.getFirstPage().copyAsFormXObject(pdfDoc); signatureDoc.close(); // 3. 将签名XObject设置到表单域,同时适配表单域的尺寸避免变形 signatureField.setImage(signXObject); // 可选:设置表单域为只读,避免后续被修改 signatureField.setReadOnly(true); // 4. 可选:如果不需要保留表单域可编辑属性,可以扁平化表单 // form.flattenFields(); pdfDoc.close(); } }
注意事项
- 如果你提取的签名PDF有多余空白边距,可以在转换为FormXObject之后,调用
signXObject.setBBox()方法裁剪多余空白,让签名在表单域内显示更协调 - 如果出现签名变形的情况,可以先获取表单域的宽高,再等比例缩放XObject的BBox尺寸后再赋值
- 要确保你使用的iText7版本是7.1及以上,
PdfButtonFormField.setImage()方法是该版本之后才提供的API - 如果你使用的是iText5版本,需要先将签名页转换为Image对象,再调用
signatureField.setImage()方法,API逻辑略有差异
内容的提问来源于stack exchange,提问作者Derrick
相关产品推荐
相关产品推荐

