Add image to acrofield in iText?

Anil M picture Anil M · Apr 17, 2013 · Viewed 9.4k times · Source

I'm trying to fill PDF using acrofields, I'm able to add string data perfectly, but having issues in adding images to acrofields. This is my code for adding string data..

    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();

Answer

Bruno Lowagie picture Bruno Lowagie · Apr 17, 2013

The "official" way to do this, is to have a Button field as placeholder for the image, and to replace the "icon" of the button as described in my book:

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());

See ReplaceIcon.java for the full code sample.

DISCLAIMER: I'm the original developer of iText and the author of the "iText in Action" books.