我正在完成论文: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不适用于我的空签名字段,我只是得到一个没有文本的空字段。 我错了什么?
答案 0 :(得分:0)
我试图重现你的问题;因为我觉得C#比家里更多,所以我逐行翻译,所以行为应该没有任何区别。
所以当我在Adobe Acrobat Reader DC中打开你的文件后,我很惊讶,我可以清楚地看到它的外观:
所以我在古老的Adobe Acrobat 9.5中打开它来检查文件,但是我看到了什么:
糟糕...
但可能与上面的功能区有关。事实上,在发布标记字段按钮后,我得到了:
因此,我认为您的问题可能取决于您使用的PDF查看器及其所处的状态。这实际上对应于规范,该规范指出各个注释处理程序可能会忽略此条目并提供自己的外观。
但有一句话:我建议你这样做
writer.AddAnnotation(signatureFormField)
后
signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)
即。仅在完全完成时添加注释。
否则,在您创建外观
之前,签名字段可能已经写入文件