2016-11-23 2 views
2

Je veux créer un nouveau pdf pour chaque itération de la boucle donc je l'ai écrit le code ci-dessous en java:Créer un nouveau pdf en boucle avec iText Java

PdfWriter writer; 
PdfDocument pdf; 
Document document; 

int i=0; 
while(condition){ 
    writer = new PdfWriter("test_"+Integer.toString(i)+".pdf"); 
    pdf = new PdfDocument(writer); 
    document = new Document(pdf); 

    //content code here 

    document.close() 
    i++; 
} 

i obtenir l'exception ci-dessous sur la ligne du document.close() commande:

Exception dans le thread "principal" com.itextpdf.kernel.PdfException: Pdf objet indirect appartient à un autre document PDF. Copier l'objet au format actuel document pdf. à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream.java:184) à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream.java:174) à com.itextpdf.kernel. pdf.PdfOutputStream.write (PdfOutputStream.java:104) à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream.java:176) à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream. java: 104) à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream.java:176) à com.itextpdf.kernel.pdf.PdfOutputStream.write (PdfOutputStream.java:104) à com. itextpdf.kern el.pdf.PdfWriter.writeToBody (PdfWriter.java:335) à com.itextpdf.kernel.pdf.PdfWriter.flushObject (PdfWriter.java:243) à com.itextpdf.kernel.pdf.PdfDocument.flushObject (PDFDocument .java: 1446) à com.itextpdf.kernel.pdf.PdfObject.flush (PdfObject.java:155) à com.itextpdf.kernel.pdf.PdfObject.flush (PdfObject.java:128) à com.itextpdf .kernel.pdf.PdfObjectWrapper.flush (PdfObjectWrapper.java:96) à com.itextpdf.kernel.pdf.PdfPage.flush (PdfPage.java:489) à com.itextpdf.kernel.pdf.PdfPage.flush (PdfPage .java: 448) au com.itextpdf.kernel.pdf.PdfDocument.close (PdfDocument.java:739) au com.itextpdf.layout.Document.close (Document.java:120) au gr.m oh.Pdf.main (Pdf.java:224)

J'ai essayé beaucoup mais je ne peux pas trouver pourquoi je reçois une erreur. Si je le fais sans boucle, ça marche. De l'aide?

PS: i utiliser iText 7

+1

Vous semblez utiliser des objets PDF dans plusieurs séries de la boucle dans votre 'code de contenu // ici, c'est-à-dire pour plusieurs fichiers PDF cibles. Cela peut entraîner des exceptions comme la vôtre. – mkl

+0

merci! J'utilise un Style au-dessus de la boucle pour assigner des polices aux paragraphes. Je les ai ajoutés dans la boucle et ça marche! –

Répondre

2

J'ai eu le code ci-dessous de la boucle et il devrait être dans la boucle ...

PdfFont normalFont = PdfFontFactory.createFont(fontDirectory.getAbsolutePath()+"\\arial.ttf", "Identity-H", true); 
       normal.setFont(normalFont).setFontSize(14); 

       Style red = new Style(); 
       PdfFont redFont = PdfFontFactory.createFont(fontDirectory.getAbsolutePath()+"\\arial.ttf", "Identity-H", true); 
       red.setFont(redFont).setFontSize(14).setFontColor(Color.RED); 

       Style big = new Style(); 
       PdfFont bigFont = PdfFontFactory.createFont(fontDirectory.getAbsolutePath()+"\\arial.ttf", "Identity-H", true); 
       big.setFont(bigFont).setFontSize(18).setBold();