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

时间:2016-03-30 09:39:33

标签: itext itextpdf

我正在完成论文:PDF文档的数字签名。 我正在使用ITEXT的.Net Dlls,我写了这个代码,类似于该文件的例子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类定义的Appearance不适用于我的空签名字段,我只是得到一个没有文本的空字段。 我错了什么?

1 个答案:

答案 0 :(得分:0)

我试图重现你的问题;因为我觉得C#比家里更多,所以我逐行翻译,所以行为应该没有任何区别。

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

ITEXT.PDF in Adobe Acrobat Reader DC

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

ITEXT.PDF in Adobe Acrobat 9.5

糟糕...

但可能与上面的功能区有关。事实上,在发布标记字段按钮后,我得到了:

ITEXT.PDF in Adobe Acrobat 9.5, mark-fields button released

因此,我认为您的问题可能取决于您使用的PDF查看器及其所处的状态。这实际上对应于规范,该规范指出各个注释处理程序可能会忽略此条目并提供自己的外观。

但有一句话:我建议你这样做

writer.AddAnnotation(signatureFormField)

signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)

即。仅在完全完成时添加注释。

否则,在您创建外观

之前,签名字段可能已经写入文件