【问题标题】:How to add a signature field to an existing PDF/A document, keeping PDF/A-3A conformancy如何在现有 PDF/A 文档中添加签名字段,保持 PDF/A-3A 一致性
【发布时间】:2018-07-05 11:52:48
【问题描述】:

我正在使用以下方法将签名字段添加到新页面上的 PDF/A 文档(具有 PDF/A-3A 一致性级别)。一切似乎都正常...

public void AddCertifiedSignature(string srcPath, string destPath)
{
    var reader = new PdfReader(srcPath);
    var writer = new PdfWriter(destPath);
    var pdfDoc = new PdfADocument(reader, writer);

    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
    var ps = new PageSize(PageSize.A4);
    var newPage = pdfDoc.AddNewPage(ps);

    var signatureRectangle = new Rectangle(36, 648, 200, 100);
    var signatureAnnotation = new PdfWidgetAnnotation(signatureRectangle);
    var signatureField = PdfFormField.CreateSignature(pdfDoc, signatureRectangle, PdfAConformanceLevel.PDF_A_3A);
    signatureField.SetFieldName("SignField1");
    form.AddField(signatureField, newPage);

    pdfDoc.Close();
}

但是,在最后一行,我得到了一个例外:

Additional information: Every annotation shall have at least one appearance dictionary

有谁知道如何添加请求的字典(或更好的实现)?我目前正在使用 iText 7.1.2.0 (.NET)。

【问题讨论】:

  • 首先,当您处理 PDF/A 文档并希望保持合规性时,应该使用 PdfADocument 而不是 PdfDocument
  • 好点。不幸的是,这仍然意味着缺少某些东西。我编辑了问题。

标签: itext7


【解决方案1】:

我不是专家,但是,我使用了您的代码(并将其转换为 java,因为我正在这样做)并通过添加使其工作

PdfAnnotation annotation = pdfDoc.getLastPage().getAnnotations().get(0);
PdfFormXObject appearObj = new PdfFormXObject(signatureRectangle);
PdfAnnotationAppearance appearance = new PdfAnnotationAppearance(appearObj.getPdfObject());
annotation.setNormalAppearance(appearance);

行前

pdfDoc.Close();

不是最干净的解决方案,但我希望它有所帮助;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2013-12-31
    • 2018-05-10
    • 2012-01-05
    • 2016-01-21
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多