try {
PdfReader reader = new PdfReader(filePath);
AcroFields acroFields = reader.getAcroFields();
for (String fieldName : acroFields.getSignatureNames()) {
PdfDictionary signatureDict = acroFields.getSignatureDictionary(fieldName);
PdfName subFilter = signatureDict.getAsName(PdfName.SUBFILTER);
if (subFilter != null && subFilter.equals(PdfName.ADBE_PKCS7_DETACHED)) {
PdfString appearanceStreamRef = signatureDict.getAsString(PdfName.AP);
if (appearanceStreamRef != null) {
PRIndirectReference ref = (PRIndirectReference) PdfReader.getPdfObject(appearanceStreamRef);
PdfStream appearanceStream = (PdfStream) PdfReader.getPdfObject(ref);
byte[] content = PdfReader.getStreamBytes(appearanceStream);
FileOutputStream fos = new FileOutputStream("path/to/output.png");
fos.write(content);
fos.close();
reader.close();
} catch (IOException | DocumentException e) {
e.printStackTrace();
import com.itextpdf.text.pdf.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class PdfSignatureExample {
public static void main(String[] args) {
String filePath = "path/to/signed_document.pdf";
try {
PdfReader reader = new PdfReader(filePath);
AcroFields acroFields = reader.getAcroFields();
for (String fieldName : acroFields.getSignatureNames()) {
PdfDictionary signatureDict = acroFields.getSignatureDictionary(fieldName);
PdfName subFilter = signatureDict.getAsName(PdfName.SUBFILTER);
if (subFilter != null && subFilter.equals(PdfName.ADBE_PKCS7_DETACHED)) {
PdfString appearanceStreamRef = signatureDict.getAsString(PdfName.AP);
if (appearanceStreamRef != null) {
PRIndirectReference ref = (PRIndirectReference) PdfReader.getPdfObject(appearanceStreamRef);
PdfStream appearanceStream = (PdfStream) PdfReader.getPdfObject(ref);
byte[] content = PdfReader.getStreamBytes(appearanceStream);
FileOutputStream fos = new FileOutputStream("path/to/output.png");
fos.write(content);
fos.close();
reader.close();
} catch (IOException | DocumentException e) {
e.printStackTrace();
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class PdfSignatureExample {
public static void main(String[] args) {
String filePath = "path/to/signed_document.pdf";
try {
PdfReader reader = new PdfReader(filePath);
PdfDocument document = new PdfDocument(reader);
for (int i = 1; i <= document.getNumberOfPages(); i++) {
PdfDictionary pageDict = document.getPage(i).getPdfObject();
PdfDictionary annotsDict = pageDict.getAsDictionary(PdfName.Annots);
if (annotsDict != null) {
for (int j = 0; j < annotsDict.size(); j++) {
PdfDictionary annotDict = annotsDict.getAsDictionary(j + 1);
PdfName subtype = annotDict.getAsName(PdfName.Subtype);
if (subtype != null && subtype.equals(PdfName.Widget)) {
PdfDictionary apDict = annotDict.getAsDictionary(PdfName.AP);
if (apDict != null) {
PdfStream nStream = apDict.getAsStream(PdfName.N);
if (nStream != null) {
byte[] content = nStream.getBytes();
FileOutputStream fos = new FileOutputStream("path/to/output.png");
fos.write(content);
fos.close();
document.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();