由 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打开你的文件后,我很惊讶,我可以清楚地看到外观:
所以我在我古老的 Adobe Acrobat 9.5 中打开它来检查文件,但我看到了什么:
糟糕...
但可能与上面的丝带有关。事实上,在释放标记字段按钮后,我得到了:
所以我假设您的问题可能取决于您使用的 PDF 查看器及其所处的状态。这实际上对应于说明 个别注释处理程序可能会忽略此条目并提供自己的规范出场次数。
但请注意:我建议你这样做
writer.AddAnnotation(signatureFormField)
之后
signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)
即只有在完全完成时才添加注释。
否则,在您完成外观创建之前,签名字段可能已经写入文件
我正在研究论文: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打开你的文件后,我很惊讶,我可以清楚地看到外观:
所以我在我古老的 Adobe Acrobat 9.5 中打开它来检查文件,但我看到了什么:
糟糕...
但可能与上面的丝带有关。事实上,在释放标记字段按钮后,我得到了:
所以我假设您的问题可能取决于您使用的 PDF 查看器及其所处的状态。这实际上对应于说明 个别注释处理程序可能会忽略此条目并提供自己的规范出场次数。
但请注意:我建议你这样做
writer.AddAnnotation(signatureFormField)
之后
signatureFormField.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)
即只有在完全完成时才添加注释。
否则,在您完成外观创建之前,签名字段可能已经写入文件