关于可见数字签名

about visible digital signatures

给定一个带有可见数字签名的输入 pdf 文件,我想获得一个新的 pdf 文件,它将签名的视觉表示形式保留为图形对象,但不再保留为签名字段。

我已经使用工具完成了该操作(请参阅输入和输出文件),但我想知道如何使用 iText 完成此操作。

输入:input.pdf

输出:output.pdf

请注意,可以验证完成良好的签名(使用来自 CDS 或 AATL 成员的 CA 的证书),以便您可以测试 (1) "integrity"、(2) "authentication",和 (3) "non-repudiation"。通过丢弃签名字段,您将丢失所有信息,并且没有人能够知道文档在签名后是否被更改 (1),也不知道是谁签署了文档 (2)。签名者总是可以声称他从未签署过该文件 (3),因为任何人都可以创建他签名的视觉表示。

通过删除签名,您将创建一个没有实际签名的副本,类似于您打印经过数字签名的文档时所拥有的副本。通过删除实际的数字签名,您将丢弃重要信息,只保留视觉外观。

话虽如此,您的要求非常简单:您想要展平 PDF 文件。这显示在 FlattenSignature example. Check the file output_no_longer_signed.pdf 中,您会注意到它看起来与您的 output.pdf.

完全一样

实现这个的代码很简单:

public void manipulatePdf(String src, String dest)
    throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setFormFlattening(true);
    stamper.close();
}

对我来说,布鲁诺的回答没有用。 我需要打电话给 setGenerateAppearances(true) 才能看到扁平化的签名

public void flatPdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setGenerateAppearances(true);
    stamper.setFormFlattening(true);
    stamper.close();
}

使用:iText 5.5.13