Itext 未看到添加到PDF的空白签名字段
我正在将文本字段替换为签名字段,但无法在生成的PDF中看到这些空白签名字段。 这些空白字段需要在后期由客户进行数字签名Itext 未看到添加到PDF的空白签名字段,itext,Itext,我正在将文本字段替换为签名字段,但无法在生成的PDF中看到这些空白签名字段。 这些空白字段需要在后期由客户进行数字签名 /// <summary> /// Adds a text field to the report that the user can update signatures to the specified location. /// </summary> /// <param name="writer">pdf
/// <summary>
/// Adds a text field to the report that the user can update signatures to the specified location.
/// </summary>
/// <param name="writer">pdfwriter of document.</param>
/// <param name="xPosition">The lower left x position of the text field.</param>
/// <param name="yPosition">The lower left y position of the text field.</param>
/// <param name="width">The width of the text field.</param>
/// <param name="height">The height of the text field.</param>
/// <param name="fieldId"></param>
protected virtual void AddTextField(iTextSharp.text.pdf.PdfWriter writer, String fieldId, float xPosition, float yPosition, float width, float height)
{
Rectangle position = new Rectangle(xPosition, yPosition, xPosition + width, Math.Max(yPosition - height, 0));
iTextSharp.text.pdf.TextField field = new iTextSharp.text.pdf.TextField(writer, position, fieldId);
// Requirement is to change existing textFields to blank Signature fields
// In the method, memoryStream, reader and stamper are not available.
// Below is the textField I need to transform into Signature field.
// field.Text = String.Empty;
// field.Font = FontFactory.GetFont("Arial Narrow").BaseFont;
// field.TextColor = Color.WHITE;
// field.FontSize = 9;
// Not seeing the signature field appear on the pdf.
// Don't know exactly the reason
PdfFormField sig = PdfFormField.CreateSignature(writer);
sig.SetWidget(position, null);
sig.Flags = PdfAnnotation.FLAGS_PRINT;
sig.Put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g"));
sig.FieldName = fieldId;
sig.SetPage();
writer.AddAnnotation(sig);
//Also tried below code
//PdfFormField pfield = PdfFormField.CreateSignature(writer);
//pfield.FieldName = fieldId;
//pfield.SetFieldFlags(PdfAnnotation.FLAGS_PRINT);
//pfield.SetWidget(position, null);
//pfield.SetPage();
//pfield.MKBorderColor = Color.BLACK;
//pfield.MKBackgroundColor = Color.BLUE;
//PdfAppearance tp = PdfAppearance.CreateAppearance(writer, width, height);
//tp.Rectangle(position);
//tp.Stroke();
//pfield.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp);
//writer.AddAnnotation(pfield);
}
//
///向报告中添加一个文本字段,用户可以将签名更新到指定位置。
///
///文档的PDF编写器。
///文本字段的左下角x位置。
///文本字段的左下角y位置。
///文本字段的宽度。
///文本字段的高度。
///
受保护的虚拟void AddTextField(iTextSharp.text.pdf.PdfWriter编写器、字符串字段ID、float xPosition、float yPosition、float width、float height)
{
矩形位置=新矩形(xPosition,yPosition,xPosition+宽度,数学最大值(yPosition-高度,0));
iTextSharp.text.pdf.TextField=new iTextSharp.text.pdf.TextField(writer,position,fieldId);
//要求是将现有文本字段更改为空白签名字段
//在该方法中,memoryStream、reader和Stamp不可用。
//下面是我需要转换为签名字段的文本字段。
//field.Text=String.Empty;
//field.Font=FontFactory.GetFont(“Arial窄”).BaseFont;
//field.TextColor=Color.WHITE;
//field.FontSize=9;
//在pdf上看不到签名字段。
//我不知道确切的原因
PdfFormField sig=PdfFormField.CreateSignature(writer);
sig.SetWidget(位置,空);
sig.Flags=pdfanotation.Flags\u PRINT;
sig.Put(PdfName.DA,新的PdfString(“/Helv 0 Tf 0 g”);
sig.FieldName=fieldId;
sig.SetPage();
writer.AddAnnotation(sig);
//也尝试了下面的代码
//PdfFormField pfield=PdfFormField.CreateSignature(writer);
//pfield.FieldName=fieldId;
//pfield.SetFieldFlags(PDFanRotation.FLAGS_打印);
//pfield.SetWidget(位置,空);
//pfield.SetPage();
//pfield.MKBorderColor=Color.BLACK;
//pfield.MKBackgroundColor=Color.BLUE;
//PdfAppearance tp=PdfAppearance.CreateAppearance(书写器、宽度、高度);
//tp.矩形(位置);
//tp.Stroke();
//pfield.SetAppearance(PDFanRotation.APPEARANCE_NORMAL,tp);
//writer.AddAnnotation(pfield);
}
第二个任务:
*如果客户端在以后的阶段(使用第三方工具,如DocuSign)将签名文本添加到这些字段中,我真的需要签名字段吗?或者简单的PDFTextFields真的有效
在查询中添加上述问题,因为这可能有助于关联我的场景
提前感谢您的帮助。我刚刚用
public void AddSignatureFieldLikePrashantJha()
{
Document document = new Document();
Stream stream = new FileStream(@"emptySignatureFieldLikePrashantJha.pdf", FileMode.Create);
PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream);
document.Open();
AddTextField(pdfWriter, "Signature", 100, 100, 400, 50);
document.Close();
}
在结果中,Adobe Reader DC通过箭头清楚地指示签名字段的位置:
将焦点放在该字段上(例如,按TAB键),该字段甚至会有一个帧:
早期的Adobe Reader版本更清楚地显示了这一点,例如9.5:
因此,我无法复制你是谁
无法在生成的PDF中看到这些空白签名字段
如果您想让字段区域看起来更加明显,您确实可以使用
pdfaappearance
,例如
protected virtual void AddFancySignatureField(iTextSharp.text.pdf.PdfWriter writer, String fieldId, float xPosition, float yPosition, float width, float height)
{
Rectangle position = new Rectangle(xPosition, yPosition, xPosition + width, Math.Max(yPosition - height, 0));
iTextSharp.text.pdf.TextField field = new iTextSharp.text.pdf.TextField(writer, position, fieldId);
PdfFormField sig = PdfFormField.CreateSignature(writer);
sig.SetWidget(position, null);
sig.Flags = PdfAnnotation.FLAGS_PRINT;
sig.Put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g"));
sig.FieldName = fieldId;
sig.SetPage();
PdfAppearance tp = PdfAppearance.CreateAppearance(writer, width, height);
PdfShading radial = PdfShading.SimpleRadial(writer, 0, height / 2, 0, 0, height / 2, width, BaseColor.RED, BaseColor.GREEN);
tp.PaintShading(radial);
sig.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp);
writer.AddAnnotation(sig);
}
结果如下所示:
第二个任务:*如果客户端在稍后阶段(使用第三方工具,如DocuSign)将签名文本添加到这些字段中,我真的需要签名字段吗?或者简单的PDFTextFields真的有效 这在很大程度上取决于所使用的第三方工具。有些这样的工具需要签名字段,有些需要内容中的文本标记,有些需要坐标给定的位置