2016-11-01 1 views
1

Lors de l'exécution de ce code avec le PdfDocument n'ayant pas de source de lecture, il fonctionne correctement. Lorsque j'essaie de lire à partir d'un document PDF prédéfini, il cesse de créer le formulaire/les widgets, mais ajoute toujours le paragraphe comme prévu. Il n'y a pas d'erreur donnée. Est-ce que quelqu'un comprend pourquoi cela se passe?IText7 ne crée que des formulaires/widgets sur les nouveaux documents

Voici le code que je suis en cours d'exécution:

public class HelloWorld { 

    public static final String DEST = "sampleOutput.pdf"; 
    public static final String SRC = "sample.pdf"; 
    public static void main(String args[]) throws IOException { 
     File file = new File(DEST); 

     new HelloWorld().createPdf(SRC, DEST); 
    } 

    public void createPdf(String src, String dest) throws IOException { 
     //Initialize PDF reader and writer 
     PdfReader reader = new PdfReader(src); 
     PdfWriter writer = new PdfWriter(dest); 

     //Initialize PDF document 
     PdfDocument pdf = new PdfDocument(writer); //if i do (reader, writer) the widget isn't added to the first page anymore. 

     // Initialize document 
     Document document = new Document(pdf); 

     HelloWorld.addAcroForm(pdf, document); 

     //Close document 
     document.close(); 
    } 

    public static PdfAcroForm addAcroForm(PdfDocument pdf, Document doc) throws IOException { 
     Paragraph title = new Paragraph("Test Form") 
       .setTextAlignment(TextAlignment.CENTER) 
       .setFontSize(16); 
     doc.add(title); 
     doc.add(new Paragraph("Full name:").setFontSize(12)); 

     //Add acroform 
     PdfAcroForm form = PdfAcroForm.getAcroForm(doc.getPdfDocument(), true); 
     //Create text field 
     PdfTextFormField nameField = PdfFormField.createText(doc.getPdfDocument(), 
       new Rectangle(99, 753, 425, 15), "name", ""); 

     form.addField(nameField); 
     return form; 

    } 
} 
+0

Tout d'abord: merci de fournir un exemple de code. Il est tellement plus facile de répondre à une question quand les gens nous donnent un échantillon que nous pouvons compiler pour tester. J'ai essayé votre exemple et je n'ai pas pu reproduire le problème: le champ est ajouté correctement quand j'essaye votre code. J'utilise iText 7.0.1 et un fichier source avec le format A4. Pouvons-nous jeter un coup d'oeil à votre fichier source. Peut-être que la taille de la page est définie différemment. Si l'origine de votre système de coordonnées ('(0, 0)') n'est pas dans le coin inférieur gauche, vous pouvez obtenir le problème que vous décrivez. –

+0

@BrunoLowagie Merci pour la réponse. Voici le fichier d'exemple, voir tout ce qui pourrait le rejeter? http://www.filedropper.com/sample_15 – Elliot

+0

@BrunoLowagie Super idée avec l'origine. J'ai joué avec les coordonnées x et y et je pense que je mettais juste le widget hors de portée. Très appréciée! Réjouissez-vous d'utiliser l'outil plus. – Elliot

Répondre

1

votre code J'adapté comme ceci:

public static PdfAcroForm addAcroForm(PdfDocument pdf, Document doc) throws IOException { 
    Paragraph title = new Paragraph("Test Form") 
      .setTextAlignment(TextAlignment.CENTER) 
      .setFontSize(16); 
    doc.add(title); 
    doc.add(new Paragraph("Full name:").setFontSize(12)); 

    PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true); 
    PdfTextFormField nameField = PdfFormField.createText(pdf, 
      new Rectangle(99, 525, 425, 15), "name", ""); 
    form.addField(nameField, pdf.getPage(1)); 
    return form; 
} 

Vous remarquerez deux changements:

  1. je change la Décalage Y du champ (525 au lieu de 753). Maintenant, le champ est ajouté à l'intérieur de la zone visible de la page. Dans votre code, le champ a été ajouté, mais il n'était pas visible.
  2. J'ai défini à quelle page les champs doivent être ajoutés en ajoutant pdf.getPage(1) comme second paramètre pour la méthode addField().
+0

Ceci est la solution , Je vous remercie. J'ai 1 autre problème que je soumettrai et apprécierais votre connaissance. Je ne peux pas utiliser deux widgets référençant la même valeur de formulaire. Je vois seulement les deux widgets quand je change les valeurs de forme pour être séparé. – Elliot