簡體   English   中英

在 PDF 中添加多個簽名字段時遇到問題

[英]Getting issue on adding multiple signature fields in the PDF

我正在使用 iText7 在文檔中添加多個簽名字段。 我的情況如下:

在文檔中添加 1 個簽名字段並簽署文檔。 該簽名在 Adob​​e 中得到驗證。 在同一文檔中添加第二個簽名字段並再次簽署該文檔。 在 Adob​​e 中打開文檔后,最后一個簽名得到驗證,但已簽名的簽名字段顯示以下錯誤:

簽名包含不正確、無法識別、損壞或可疑的數據。 支持信息:SigDict / 內容非法數據

將簽名字段添加到PDF中的代碼片段如下:

using (Stream memoryStream = new MemoryStream())
using (PdfReader _pdfReader = new PdfReader(new 
MemoryStream(_documentBytes)).SetUnethicalReading(true))
using (PdfDocument pdfDocument = new PdfDocument(_pdfReader, new PdfWriter(memoryStream)))
{
PdfAcroForm pdfAcroForm = PdfAcroForm.GetAcroForm(pdfDocument, true);
foreach (PDFSignatureField field in signatureFields)
{
//Initializing signature position object
PDFSignaturePosition SigPosition = field.Position;
for (int i = 0; i < SigPosition.Pages.Length; ++i)
{
//Getting PDF document page
PdfPage page = pdfDocument.GetPage(SigPosition.Pages[i]);
if (page == null)
{
page = pdfDocument.GetPage(SigPosition.PageNumber);
}
//Getting PDF document page rotation
int rotation = page.GetRotation();
//Getting signature field rects according to PDF page
iText.Kernel.Geom.Rectangle rect;
if (rotation > 0 && SigPosition.Position == PDFSignaturePosition.DefaultSignaturePosition.Custom)
{
rect = GetSignaturePositionAccordingToRotation(SigPosition.Rect, page.GetCropBox(), rotation);
}
else
{
rect = GetSignaturePositionRect(SigPosition.Position, SigPosition.Rect, page.GetCropBox());
}
//Creating signature field into PDF page
PdfFormField sig = PdfSignatureFormField.CreateSignature(pdfDocument, rect); 
//PdfFormField.CreateSignature(pdfDocument, rect);

//Setting signature field visible flag
if (field.Display == (int)SignatureDisplayType.INVISIBLE)
{
sig.SetFieldFlags(PdfFormField.HIDDEN);
sig.SetVisibility(PdfFormField.HIDDEN);
}
else
{
sig.SetFieldFlags(PdfFormField.VISIBLE);
sig.SetVisibility(PdfFormField.VISIBLE);
}
//Setting signature field name
sig.SetFieldName(i == 0 ? field.Name : field.Name + " - " + SigPosition.Pages[i]);
//Setting signature field page
sig.SetPage(SigPosition.Pages[i]);
//Adding signature field into AcroForm
pdfAcroForm.AddField(sig);
pdfAcroForm.AddFieldAppearanceToPage(sig, page);
pdfAcroForm.SetDefaultAppearance("/Helv 0 Tf 0 g");
//Making indirect reference of the added signature field into PDF
sig.MakeIndirect(pdfDocument);
}
//Closing PDF document object
pdfDocument.Close();
//Getting latest document bytes after adding PDF field
documentBytes = ((MemoryStream)memoryStream).ToArray();
_documentBytes = documentBytes;
}
}

任何人都可以幫助我解決這個問題。

問候

使用append模式使 iText 創建增量更新,而不是從頭開始創建新文檔。 即使用

PdfDocument pdfDocument = new PdfDocument(_pdfReader, new PdfWriter(memoryStream), new StampingProperties().UseAppendMode())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM