我使用以下链接中的函数删除了 pdf 中的所有签名。
我得到的是一个没有签名的 pdf 文件,但在 pdf 内容中包含了它们的视觉表示。是否有一个功能也可以删除视觉表示?
我需要这个,因为我想计算原始 pdf 的哈希值。谢谢!
最佳答案
您声称:我使用以下链接中的此函数删除 PDF 中的所有签名,但该示例并不是要删除签名,而是旨在扁平化签名(该示例称为FlattenSignatures
)。
扁平化意味着签名字段被删除(签名消失了),但相应的小部件注释(视觉表示为你称之为)被保留。
如果要删除签名字段及其小部件注释,则需要删除该字段:
PdfReader reader = new PdfReader(src);
AcroFields acroFields = reader.getAcroFields();
acroFields.removeField("my_signature_name");
PdfStamper stamper = new PdfStamper(reader, dest);
stamper.close();
reader.close();
但是,您声称我需要这个,因为我想计算原始 pdf 的哈希值。这是完全错误的。删除签名不会生成原始 PDF!
如果您想验证签名,您应该按照签名字典中的定义从 PDF 中提取字节范围。请参阅Verifying digital signatures in PDF documents 。请注意,您之前曾问过这个问题,并且已经得到了充分的回答:iText verify integrity of a pdf in java .
除非在附加模式中添加签名(如果我是您,我不会假设),您将无法获得原始 PDF。您知道签名是否是在附加模式下添加的吗?如果是这样,请将此信息添加到您的问题中。
关于java - iText 删除签名(扁平化过程)但保留其视觉表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918188/