如何使用itextsharp将表单字段添加到现有的pdf中?如何使用itextsharp将表单字段添加到现有的pdf中?
我有一个现有的pdf文档,我想添加表单字段到它而不创建一个副本并写出一个新的文档。
如何使用itextsharp将表单字段添加到现有的pdf中?如何使用itextsharp将表单字段添加到现有的pdf中?
我有一个现有的pdf文档,我想添加表单字段到它而不创建一个副本并写出一个新的文档。
经过进一步的审查,该领域的裁决被推翻。如果你形成了平坦的印模,这些字段不会显示在生成的文档上(因为它们缺少“外观”设置)。顺便说一句,表单扁平化可以防止表单域的进一步编辑。现在我们可以在表单中添加外观,但是,更简单的方法是使用TextField类,而不用担心明确设置“外观”对象。
public void ABetterWayToAddFormFieldToExistingPDF()
{
PdfReader reader = new PdfReader(@"c:\existing.pdf");
FileStream out = new FileStream(@"C:\existingPlusFields.pdf", FileMode.Create, FileAccess.Write);
PdfStamper stamp = new PdfStamper(reader, out);
TextField field = new TextField(stamp.Writer, new iTextSharp.text.Rectangle(40, 500, 360, 530), "some_text");
// add the field here, the second param is the page you want it on
stamp.AddAnnotation(field.GetTextField(), 1);
stamp.FormFlattening = true; // lock fields and prevent further edits.
stamp.Close();
}
我这个奋斗了一段时间,所以想我会发布问题&答案
使用PdfStamper iText的类是关键。 (我想这确实做了一个副本,但它比使用itext PdfCopy类更清洁)。
public void AddFormFieldToExistingPDF()
{
PdfReader reader = new PdfReader(@"c:\existing.pdf");
FileStream out = new FileStream(@"C:\existingPlusFields.pdf", FileMode.Create, FileAccess.Write);
PdfStamper stamp = new PdfStamper(reader, out);
PdfFormField field = PdfFormField.CreateTextField(stamp.Writer, false, false, 50);
// set a field w/some position and size
field.SetWidget(new iTextSharp.text.Rectangle(40, 500, 360, 530),
PdfAnnotation.HIGHLIGHT_INVERT);
field.SetFieldFlags(PdfAnnotation.FLAGS_PRINT);
field.FieldName = "some_field";
// add the field here, the second param is the page you want it on
stamp.AddAnnotation(field, 1);
stamp.Close();
}
我的代码与您的代码非常相似。签名字段在屏幕上表现完全正常,但是一旦我尝试打印它,它会在纸上显示空白。这是否发生在你身上? – Haoest 2013-10-26 04:24:52
使用pdfStamper就可以完成它。
PdfStamper Stamper= new PdfStamper(new PdfReader(sourcefile), File.Create(NewOutputFile));
TextField moreText = new TextField(Stamper.Writer,
new iTextSharp.text.Rectangle(20, 20, 590, 780), "moreText");
moreText.Visibility = TextField.VISIBLE_BUT_DOES_NOT_PRINT;
moreText.Text = "Use this space for any additional information";
moreText.Options = (TextField.MULTILINE);
PdfFormField Fieldtxt = moreText.GetTextField();
Stamper.AddAnnotation(Fieldtxt, n);
添加了AddAnotation的字段无论如何都不会变平,请参阅itextsharp源代码中的Formflattening属性注释http://sourceforge.net/p/itextsharp/code/453/tree/trunk/src/core/iTextSharp/text /pdf/PdfStamper.cs – 2012-10-15 15:42:07