由 PDFAppearance class 定义的外观不适用于签名字段

Appearance defined by PDFAppearance class dont apply to Signature Field

我正在研究论文:PDF 文档的数字签名。 我正在使用 ITEXT 的 .Net Dll,我编写了类似于该论文的示例 2.6 的代码:

Private Sub Method()
    'step   1:  Create a Document
    Dim document = New Document()

    'step   2:  Create a PdfWriter
    Dim file = "C:\Export\ITEXT.PDF"
    Dim FileOutputStream As System.IO.FileStream = System.IO.File.Open(file, System.IO.FileMode.Create)
    Dim writer = PdfWriter.GetInstance(document, FileOutputStream)

    'step   3: Open the Document
    document.Open()

    'step   4: Add content
    document.Add(New Paragraph("leeres Signaturfeld"))

    Dim signatureFormField = PdfFormField.CreateSignature(writer)

    signatureFormField.FieldName = "FieldName"
    signatureFormField.SetPage()
    signatureFormField.SetWidget(New Rectangle(150, 750, 250, 800), PdfAnnotation.HIGHLIGHT_NONE)
    signatureFormField.SetFieldFlags(PdfAnnotation.FLAGS_PRINT)

    writer.AddAnnotation(signatureFormField)

    Dim tp = PdfAppearance.CreateAppearance(writer, 72, 48)
    tp.SetColorStroke(BaseColor.GRAY)
    tp.SetColorFill(BaseColor.LIGHT_GRAY)
    tp.Rectangle(0.5F, 0.5F, 71.5F, 20.5F)
    tp.FillStroke()
    tp.SetColorFill(BaseColor.BLUE)
    ColumnText.ShowTextAligned(tp, Element.ALIGN_CENTER, New Phrase("SIGN HERE"), 36, 24, 25)
    signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)

    'step   5: Close the Document
    document.Close()
End Sub

但是 PDFAppearance class 定义的外观不适用于我的空签名字段,我只是得到一个没有文本的空字段。 我做错了什么?

我已尝试重现您的问题;因为我觉得 C# 比 VB 更自在,所以我逐行翻译它,所以在行为上应该没有任何差异。

所以当我用Adobe Acrobat Reader DC打开你的文件后,我很惊讶,我可以清楚地看到外观:

所以我在我古老的 Adob​​e Acrobat 9.5 中打开它来检查文件,但我看到了什么:

糟糕...

但可能与上面的丝带有关。事实上,在释放标记字段按钮后,我得到了:

所以我假设您的问题可能取决于您使用的 PDF 查看器及其所处的状态。这实际上对应于说明 个别注释处理程序可能会忽略此条目并提供自己的规范出场次数。


但请注意:我建议你这样做

writer.AddAnnotation(signatureFormField)

之后

signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)

即只有在完全完成时才添加注释。

否则,在您完成外观创建之前,签名字段可能已经写入文件