提取图像和签名信息

从签名字段提取图像

Aspose.PDF for Java 支持使用 SignatureField 类对 PDF 文件进行数字签名,并且在对文档进行签名时,还可以为 SignatureAppearance 设置图像。现在,该 API 还提供了提取签名信息以及与签名字段相关联的图像的功能。

为了提取签名信息,我们在 SignatureField 类中引入了 ExtractImage 方法。 请查看以下代码片段,演示了从 SignatureField 对象中提取图像的步骤:

public class ExampleExtractImageAndSignature {

    private static String _dataDir = "/home/aspose/pdf-examples/Samples/Secure-Sign/";

    public static void ExtractingImageFromSignatureField() {
        Document pdfDocument = new Document(_dataDir + "ExtractingImage.pdf");

        int i = 0;
        try {
            for (WidgetAnnotation field : pdfDocument.getForm()) {
                SignatureField sf = (SignatureField) field;
                if (sf != null) {
                    FileOutputStream output = new FileOutputStream(_dataDir + "im" + i + ".jpeg");
                    InputStream tempStream = sf.extractImage();
                    byte[] b = new byte[tempStream.available()];
                    tempStream.read(b);
                    output.write(b);
                    output.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (pdfDocument != null)
                pdfDocument.dispose();
        }

    }

替换签名图片

有时候您可能需要仅替换 PDF 文件中已存在签名字段的图片。为实现此需求,首先我们需要在 PDF 文件内搜索表单字段,识别签名字段,获取签名字段的尺寸(矩形尺寸),然后在相同尺寸上盖印图片。

提取签名信息

Aspose.PDF for Java 支持使用 SignatureField 类对 PDF 文件进行数字签名。目前,我们可以确定证书的有效性,但无法提取整个证书。可以提取的信息包括公钥、指纹、发行者等。

为了提取签名信息,我们在 SignatureField 类中引入了 ExtractCertificate 方法。 请查看以下代码片段,其中演示了从 SignatureField 对象中提取证书的步骤:

    public static void ExtractSignatureInformation() throws IOException {
        String input = _dataDir + "ExtractSignatureInfo.pdf";
        Document pdfDocument = new Document(input);

        for (WidgetAnnotation field : pdfDocument.getForm()) {
            SignatureField sf = (SignatureField) field;
            if (sf != null) {
                InputStream cerStream = sf.extractCertificate();
                if (cerStream != null) {

                    byte[] buffer = new byte[cerStream.available()];
                    cerStream.read(buffer);

                    File targetFile = new File(_dataDir+"targetFile.cer");
                    OutputStream outStream = new FileOutputStream(targetFile);
                    outStream.write(buffer);
                    outStream.close();
                }
            }
        }
    }
}