Im working on a digital signature solution
im looking for signature panels within a pdf document using a solution i found here
Itext get field coordinates from existing pdf
i then apply a signature to the location of the signature field, and it should look like the user has signed the document
however when the following line executes it exits the sub
for(String signame : fields.getBlankSignatureNames())
its a bit of a mystery as there are two signature fields within the fields object
any help would be appreciated
heres my full code
import android.os.Environment;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class PDFStamper {
public static void main() {
try {
PdfReader pdfReader = new PdfReader(Environment.getExternalStorageDirectory()+"/sample.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(Environment.getExternalStorageDirectory()+"/sample-signed.pdf"));
Image image = Image.getInstance(Environment.getExternalStorageDirectory()+"/signature.png");
float scaler = 10;
image.scalePercent(scaler);
String pdfFile = Environment.getExternalStorageDirectory()+"/sample.pdf";
PdfReader reader = new PdfReader(pdfFile);
AcroFields fields = reader.getAcroFields();
for(String signame : fields.getBlankSignatureNames()) {
List<AcroFields.FieldPosition> positions = fields.getFieldPositions(signame);
Rectangle rect = positions.get(0).position; // In points:
float left = rect.getLeft();
float bTop = rect.getTop();
float width = rect.getWidth();
float height = rect.getHeight();
int page = positions.get(0).page;
Rectangle pageSize = reader.getPageSize(page);
float pageHeight = pageSize.getTop();
float top = pageHeight - bTop;
System.out.print(signame + "::" + page + "::" + left + "::" + top + "::" + width + "::" + height + "\n");
//put content over
PdfContentByte content = pdfStamper.getUnderContent(page);
content = pdfStamper.getOverContent(page);
image.setAbsolutePosition(left, bTop);
content.addImage(image);
}
pdfStamper.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}