最近项目中需要给固定格式的PDF文件动态添加内容,记录下实现方式:
1. 使用Adobe打开PDF,点击右下角的准备表单

2. 双击名称字段,给字段添加标签productName
3. 代码
public static void main(String[] args) throws Exception{
Map data = new HashMap();//要插入的数据
data.put("productInfo_organProdFullName", "测试");
//初始化itext
//设置编码
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
PdfReader pdfReader=new PdfReader("E:\Doc\demo.pdf");
PdfStamper pdfStamper=new PdfStamper(pdfReader, new FileOutputStream("E:\Doc\3.pdf"));
AcroFields form = pdfStamper.getAcroFields();
form.addSubstitutionFont(baseFont);
//写入数据
for(String key : data.keySet()){
String value=data.get(key).toString();
//key对应模板数据域的名称
form.setField(key,value, true);
}
// //添加图片
// int pageNo = form.getFieldPositions("img").get(0).page;
// Rectangle signRect = form.getFieldPositions("img").get(0).position;
// float x = signRect.getLeft();
// float y = signRect.getBottom();
// Image image = Image.getInstance("图片路径");
// PdfContentByte under = pdfStamper.getOverContent(pageNo);
// //设置图片大小
// image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
// //设置图片位置
// image.setAbsolutePosition(x, y);
// under.addImage(image);
//设置不可编辑
pdfStamper.setFormFlattening(true);
pdfStamper.close();
}
4. 结果