gpt4 book ai didi

c# - 在 "PDFsharp"中将第二个数字签名添加到 PDF 时出错

转载 作者:行者123 更新时间:2023-12-04 13:42:40 29 4
gpt4 key购买 nike

我使用了一个特定的 pull request从 PDFsharp 库使用 PDFsharp 添加数字签名到 PDF。如果它是一个未签名的文档,它工作得很好。

当我尝试向已签名的 PDF 添加第二个签名时,它收到错误“/sigflags”已经存在。
是否可以附加到“/sigflags”?而不是试图添加它?

 private void AddSignatureComponents(object sender, EventArgs e)
{
var catalog = Document.Catalog;
if (catalog.AcroForm == null)
catalog.AcroForm = new PdfAcroForm(Document);
catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3));

var signature = new PdfSignatureField(Document);
var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value);
var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0));
signature.Contents = paddedContents;
signature.ByteRange = paddedRange;
signature.Reason = Options.Reason;
signature.Location = Options.Location;
signature.Rectangle = new PdfRectangle(Options.Rectangle);
signature.AppearanceHandler = Options.AppearanceHandler ?? new DefaultAppearanceHandler()
{
Location = Options.Location,
Reason = Options.Reason,
Signer = Certificate.GetNameInfo(X509NameType.SimpleName, false)
};
signature.PrepareForSave();
this.contentsTraker = new PositionTracker(paddedContents);
this.rangeTracker = new PositionTracker(paddedRange);
foreach (var pagenumber in Options.PageNumber)
{
var index = pagenumber - 1;

if (!Document.Pages[index].Elements.ContainsKey(PdfPage.Keys.Annots))
Document.Pages[index].Elements.Add(PdfPage.Keys.Annots, new PdfArray(Document));
try
{
(Document.Pages[index].Elements[PdfPage.Keys.Annots] as PdfArray).Elements.Add(signature);
}
catch
{
if (Document.Pages[index].Elements.ContainsKey(PdfPage.Keys.Annots))
{
Document.Pages[index].Elements.Remove(PdfPage.Keys.Annots);
Document.Pages[index].Elements.Add(PdfPage.Keys.Annots, new PdfArray(Document));
}
(Document.Pages[index].Elements[PdfPage.Keys.Annots] as PdfArray).Elements.Add(signature);
}
}
catalog.AcroForm.Fields.Elements.Add(signature);
}

最佳答案

AcroForm 中的 SigFlags 条目应仅出现一次,并且仅当存在签名字段或数字签名时才出现。这就是为什么第二个签名出现错误的原因。如果有签名字段,则 PdfInteger 值位 0 应仅为 1,如果有数字签名,则位 1 应仅为 1。通过将其设置为 3,您表明(在您的情况下是正确的)同时存在签名字段和数字签名。
您需要在代码中做的就是检查 AcroForm 中是否存在 SigFlags 条目,如果它被覆盖,则添加它。

if (catalog.AcroForm == null)
{ catalog.AcroForm = new PdfAcroForm(Document);}

if (catalog.AcroForm.Elements.ContainsKey(PdfAcroForm.Keys.SigFlags))
{ catalog.AcroForm.Elements[PdfAcroForm.Keys.SigFlags] = new PdfInteger(3);}
else
{ catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3));}

关于c# - 在 "PDFsharp"中将第二个数字签名添加到 PDF 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567610/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com