- 下载工具
链接:https://pan.baidu.com/s/1Ta8iokGyPhJOnetGqPwtUg
提取码:e0m3
使用 Adobe Acrobat DC打开想要修改的PDF文件,点击【准备表单】
上图中的fill_1,就是可以修改的文本域key,双击可以重命名
导入使用的jar包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.5</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
复制下面代码,修改文件地址
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws IOException, DocumentException {
Map<String, Object> data = new HashMap<>();//要插入的数据
data.put("fill_1", "隔壁老王");
data.put("fill_2", "隔壁老李");
//初始化itext
//设置编码
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//要修改的模本文件:E:\谷歌下载\templat.pdf
PdfReader pdfReader = new PdfReader("E:\\谷歌下载\\templat.pdf");
//修改之后输出文件地址 E:\谷歌下载\update_tempalte.pdf
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("E:\\谷歌下载\\update_tempalte.pdf"));
AcroFields form = pdfStamper.getAcroFields();
form.addSubstitutionFont(baseFont);
//写入数据
for (String key : data.keySet()) {
String value = data.get(key).toString();
//key对应模板数据域的名称
form.setField(key, value);
}
//还要将图片添加到指定的key文本域中
int pageNo = form.getFieldPositions("fill_11_2").get(0).page;
Rectangle signRect = form.getFieldPositions("fill_11_2").get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
//要添加的图片地址 C:\Users\Administrator\Desktop\6.jpeg
Image image = Image.getInstance("C:\\Users\\Administrator\\Desktop\\6.jpeg");
PdfContentByte under = pdfStamper.getOverContent(pageNo);
//设置图片大小
image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
//设置图片位置
image.setAbsolutePosition(x, y);
under.addImage(image);
//设置不可编辑
pdfStamper.setFormFlattening(true);
pdfStamper.close();
}
}
感谢两位大佬。