我正在尝试获取已签名 PDF 的原始文档,以便将其哈希值与存储的文档进行比较。
当文档有多个签名时,这真的很容易,使用 acrobat reader 你可以去文档的上一个版本保存它,就是这样。
令人惊讶的是,这不适用于第一个签名,因为没有直接的方法来获取原始数据。
因为我用 iTextSharp 以编程方式尝试过的阅读器无法做到这一点。但是,尽管我已经深入搜索,但我还没有找到如何做到这一点。我发现的唯一相关帖子是这个,但没有提供解决方案。
有没有人遇到过这个问题并找到了解决方案?
提前致谢。
编辑:我把根据 mkl 的响应提取数据的代码放在这里。阅读回复的评论,以提防未签名 PDF 长度不固定的问题。
String sOriginalText = File.ReadAllText("FileSigned.pdf", Encoding.Default);
int sTrailerNumberPosition = sOriginalText.LastIndexOf("]/Prev ") + "]/Prev ".Length;
int sTrailerNumberEndPosition = sOriginalText.IndexOf(">", sTrailerNumberPosition);
String sTrailerIndex = sOriginalText.Substring(sTrailerNumberPosition, sTrailerNumberEndPosition -sTrailerNumberPosition);
int iTrailerIndexPosition = sOriginalText.IndexOf(sTrailerIndex + "\r\n%%EOF");
int iEndPosition = sOriginalText.IndexOf("%%EOF", iTrailerIndexPosition) + "%%EOF".Length;
String sOutText = sOriginalText.Substring(0, iEndPosition);
File.WriteAllText("c:/OriginalFile.pdf", sOutText, Encoding.Default);