2009-12-04 22 views

Respuesta

7

Después de una nueva revisión, se anula el dictamen sobre el terreno. Resulta que si aplana la matriz, los campos no se muestran en el documento resultante (porque carecen de la configuración de "apariencia"). Por cierto, el aplanamiento del formulario evita nuevas ediciones de un campo de formulario. Ahora podemos agregar apariencia al formulario, sin embargo, una manera más fácil es usar la clase TextField y no preocuparse por la configuración explícita de objetos 'apariencia'.

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

Los campos agregados con AddAnotation de todos modos no están aplanados, vea el comentario sobre la propiedad Formflattening en el código fuente de itextsharp http://sourceforge.net/p/itextsharp/code/453/tree/trunk/src/core/iTextSharp/text /pdf/PdfStamper.cs –

2

tuve problemas con esto por un tiempo así que pensé que había puesto la cuestión & respuesta

Utilización de la clase PdfStamper itext es la clave. (Supongo que esto hace una copia pero es mucho más limpio que usar las clases 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

Mi código es muy similar al suyo. El campo de firma se comporta perfectamente normal en la pantalla, pero una vez que intento imprimirlo, aparece en blanco en el papel. ¿Ocurre esto a usted? – Haoest

0

Usando pdfStamper podrá llevarlo a cabo.

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); 
Cuestiones relacionadas