此代码应创建一个包含空签名字段的pdf文件:
AppDomain.CurrentDomain.UnhandledException
它创建一个带文本的pdf文件,但缺少空签名字段。
这是空签名字段的外观。
我发现了一些类似的问题: iTextsharp - Create Empty Signature Field - how can you create a signature field for a PDF template?,但他们没有完全回答我的问题。
修改 mkl解决了它。这是最终版本:
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO
Public Sub createPdfFileWithAnEmptySignatureField()
Dim strOutputFilePath As String = "C:\Temp\File_ready_for_signing.pdf"
Dim strFieldName = "myEmptySignatureField"
Dim document As Document = New Document
Dim writer As PdfWriter
writer = PdfWriter.GetInstance(document, New FileStream(strOutputFilePath, FileMode.Append))
document.Open()
document.Add(New Paragraph("This text element is successfully added, but the empty signature field is missing from this document, for some reason..."))
Dim field As PdfFormField = PdfFormField.CreateSignature(writer)
field.SetWidget(New Rectangle(222, 222, 222, 222), PdfAnnotation.HIGHLIGHT_OUTLINE)
field.Name = strFieldName
field.Flags = PdfAnnotation.FLAGS_PRINT
field.SetPage()
Dim tp As PdfAppearance = PdfAppearance.CreateAppearance(writer, 1222, 1222)
tp.Rectangle(0.5!, 0.5!, 71.5!, 47.5!)
tp.Stroke()
field.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp)
writer.AddAnnotation(field)
document.Close()
End Sub
答案 0 :(得分:1)
您的代码中存在许多错误:
您的签名字段大小为0×0 ,即它不可见。
您可以在此处定义签名字段的位置和大小:
field.SetWidget(New Rectangle(222, 222, 222, 222), PdfAnnotation.HIGHLIGHT_OUTLINE)
Rectangle
构造函数声明为
/// <summary>
/// Constructs a Rectangle-object.
/// </summary>
/// <param name="llx">lower left x</param>
/// <param name="lly">lower left y</param>
/// <param name="urx">upper right x</param>
/// <param name="ury">upper right y</param>
public Rectangle(float llx, float lly, float urx, float ury)
因此,您在左下角和右上角使用相同的坐标。因此,您的签名字段的大小为0×0,因此不可见。
假设你认为后两个参数是宽度222和高度222,你应该使用
field.SetWidget(New Rectangle(222, 222, 444, 444), PdfAnnotation.HIGHLIGHT_OUTLINE)
您的签名字段没有字段名称。是的,您设置了Name
属性:
field.Name = strFieldName
但这仅设置小部件注释的名称。但是,要使表单字段正常工作,表单字段本身需要一个名称,而注释名称是可选的:
field.FieldName = strFieldName
您以Append
档案模式创建PDF文件:
writer = PdfWriter.GetInstance(document, New FileStream(strOutputFilePath, FileMode.Append))
这通常是一个坏主意,因为PDF的连接不再是有效的PDF文档。您应该使用Create
文件模式:
writer = PdfWriter.GetInstance(document, New FileStream(strOutputFilePath, FileMode.Create))
应用这些更改后,您可以:
顺便说一句,可能另一个错误是你选择的外观尺寸:
Dim tp As PdfAppearance = PdfAppearance.CreateAppearance(writer, 1222, 1222)
特别是因为你只是画了一个小矩形:
tp.Rectangle(0.5!, 0.5!, 71.5!, 47.5!)
除非确实需要,否则你必须使用更好的匹配尺寸。