关于可见的数字签名

时间:2015-01-27 04:15:33

标签: itext digital-signature

鉴于带有可见数字签名的输入pdf文件,我想获得一个新的pdf文件,该文件将签名的可视化表示保留为图形对象,但不再作为签名字段。

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

输入:input.pdf

输出:output.pdf

2 个答案:

答案 0 :(得分:0)

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

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

这就是说,你要求的东西非常简单:你想压扁一个PDF文件。这显示在FlattenSignature示例中。检查文件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();
}

答案 1 :(得分:0)

对我来说,布鲁诺的答案没有用。 我需要致电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