关于可见数字签名
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
给定一个带有可见数字签名的输入 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