11
votes

Comment ajouter un champ de formulaire à un fichier PDF existant avec ITEXTSHARP?

Comment ajouter un champ de formulaire à un fichier PDF existant avec iTextShaRP?

J'ai un document PDF existant, j'aimerais ajouter des champs de formulaire sans créer de copie et écrire un nouveau document.


0 commentaires

3 Réponses :


2
votes

J'ai lutté avec ceci pendant un certain temps alors figuré que je posterais la question et la réponse

Utilisation de la classe PDFstamper IText est la clé. (Je suppose que cela fait une copie, mais c'est beaucoup plus propre que d'utiliser les classes IText PDFCopy). P>

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


1 commentaires

Mon code est très similaire au vôtre. Le champ de signature se comporte parfaitement normal sur l'écran, mais une fois que j'essaie de l'imprimer, il montre vide sur papier. Est-ce que cela vous arrive?



6
votes

Après examen plus approfondi, la décision sur le terrain est renversée. S'avère que si vous formez l'aplatissez l'abattre, les champs ne figurent pas sur le document résultant (car ils manquent de paramètres «apparence»). BTW, la forme aplatissement empêche d'autres modifications d'un champ de formulaire. Maintenant, nous pouvons ajouter l'apparence au formulaire, cependant, un moyen plus facile d'utiliser la classe Textfield et ne vous inquiétez pas de configurer explicitement des objets «apparence».

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


1 commentaires

Les champs ajoutés avec ADDONATION sont de toute façon non aplaties, voir le commentaire sur la propriété Formlatenel dans le code source d'ItextShaarp SourceForge.net/p/itextSharap/code/453/tree/trunk/src/core/...



1
votes

Utiliser pdfstamper strong> Vous pouvez le compléter.

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


0 commentaires