最近项目中需要给固定格式的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. 结果