2009-12-04 5 views

ответ

7

После дальнейшего рассмотрения постановление на поле опрокинуто. Оказывается, если вы формируете выравнивание шаблона, поля не отображаются в результирующем документе (потому что у них нет настроек «внешнего вида»). BTW, сглаживание формы предотвращает дальнейшие изменения поля формы. Теперь мы можем добавить внешний вид в форму, однако проще всего использовать класс 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(); 
} 
+2

Поля, добавленные с помощью AddAnotation, в любом случае не сглажены, см. Комментарий к свойству Formflattening в исходном коде itextsharp http://sourceforge.net/p/itextsharp/code/453/tree/trunk/src/core/iTextSharp/text /pdf/PdfStamper.cs –

2

Я боролся с этим на некоторое время, так понял, что я отправлю Вопрос & Ответ

Использование класса 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(); 
} 
+0

Мой код очень похож на ваш. Поле подписи ведет себя совершенно нормально на экране, но как только я пытаюсь его распечатать, на бумаге отображается пустое. Это случилось с тобой? – Haoest

0

Использование 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);