在iText中将图像添加到acrofield?

我正在尝试使用acrofields填充PDF,我能够完美地添加字符串数据,但在向acrofields添加图像时遇到了问题。 这是我添加字符串数据的代码。

File f = new File("F:/Test/Agreement.pdf"); InputStream sourceTemplatePDFUrlStream = new BufferedInputStream(new FileInputStream(f)); File destinationFile = new File("F:/Test/ag1.pdf"); PdfReader reader = new PdfReader(sourceTemplatePDFUrlStream); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream( destinationFile)); AcroFields form = stamper.getAcroFields(); Image img = Image.getInstance("E:/signature/signature.png"); Set fields = form.getFields().keySet(); Hashtable val = new Hashtable(); val.put("name", "xxx" ); val.put("city_street_zip", "xxx"+" "+"xxx"+" "+"xxx"); val.put("chck_1", "Yes" ); val.put("chck_2", "No"); val.put("chck_3", "Yes" ); val.put("street_address", "xxx" ); val.put("account_num", "1234"); Enumeration enumeration = val.keys(); // iterate through Hashtable val keys Enumeration while (enumeration.hasMoreElements()) { String nextElement = (String) enumeration.nextElement(); String nextElementValue = (String) val.get(nextElement); //System.out.println(nextElement + ":=================fillData===================:" + nextElementValue); form.setField(nextElement, nextElementValue); } //Form flattening makes the form non-editable and saveable with the //form val filled in stamper.setFormFlattening(true); stamper.close(); 

执行此操作的“官方”方法是将Button字段作为图像的占位符,并替换按钮中的“图标”,如我的书中所述 :

 PushbuttonField ad = form.getNewPushbuttonFromField(imageFieldName); ad.setLayout(PushbuttonField.LAYOUT_ICON_ONLY); ad.setProportionalIcon(true); ad.setImage(Image.getInstance("E:/signature/signature.png")); form.replacePushbuttonField("advertisement", ad.getField()); 

有关完整的代码示例,请参阅ReplaceIcon.java 。

免责声明:我是iText的原始开发者和“iText in Action”书籍的作者。

以下解决方案有效:

 public static void addImage(PdfStamper stamper,AcroFields form,String field,String fieldValue){ try{ System.out.println("Field "+field); java.util.List photograph = form.getFieldPositions(field); if(photograph!=null && photograph.size()>0){ Rectangle rect= photograph.get(0).position; //if(StringUtils.isNotBlank(fieldValue)){ Image img = Image.getInstance(fieldValue); img.scaleToFit(rect.getWidth(), rect.getHeight()); img.setBorder(2); img.setAbsolutePosition( photograph.get(0).position.getLeft() + (rect.getWidth() - img.getScaledWidth() ) , photograph.get(0).position.getTop() - (rect.getHeight())); PdfContentByte cb = stamper.getOverContent((int)photograph.get(0).page); cb.addImage(img); //} } }catch(Exception e){ e.printStackTrace(); } } 

调用上面的方法:

 addImage(stamper, form, "CustomerSign", "E:/signature/signature.png"); 

其中CustomerSign是AcroField

您可以尝试将此添加到您的代码中以添加图像

 PdfContentByte content = stamper.getOverContent(reader.getNumberOfPages()); Image image = Image.getInstance(new URL("E:/signature/signature.png")); image.setAbsolutePosition(450,650); image.scaleAbsolute(200,200); content.addImage(image); reader.close(); return output.toByteArray(); 
Interesting Posts