Come aggiungere un campo di un form ad un file pdf esistente con itextsharp?

StackOverflow https://stackoverflow.com/questions/1848930

  •  13-09-2019
  •  | 
  •  

Domanda

Come aggiungere un campo di un form ad un file pdf esistente con itextsharp?

Ho un documento pdf esistente, vorrei aggiungere I campi del modulo, senza la creazione di una copia e la scrittura di un nuovo documento.

È stato utile?

Soluzione

Dopo un ulteriore esame, la sentenza sul campo è rovesciato. Si scopre che se si forma appiattire la matrice dei campi non mostrano sul documento risultante (perché mancano impostazioni 'aspetto'). A proposito, forma appiattimento impedisce ulteriori modifiche di un campo modulo. Ora possiamo aggiungere l'aspetto della forma, tuttavia, un modo più semplice è quello di utilizzare la classe TextField e non preoccuparsi esplicitamente impostazione degli oggetti 'Aspetto'.

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();
}

Altri suggerimenti

Ho lottato con questo per un po ' così pensato che mi piacerebbe pubblicare le Domande e Risposte

Utilizzando il PdfStamper itext classe è la chiave.(Credo che questo non fare una copia, ma è molto più pulito rispetto all'utilizzo di itext PdfCopy classi).

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();
}

Utilizzando pdfStamper è possibile completarlo.

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top