2016-11-23 19 views
2

我想創建一個循環的每個迭代一個新的PDF,所以我寫了在Java代碼如下:與iText的Java的創建循環新的PDF

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++; 
} 

我得到下面的異常上的行document.close()命令:在螺紋

異常 「主」 com.itextpdf.kernel.PdfException:全文 間接對象屬於其它PDF文檔。將對象複製到當前的 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) 在融爲一體。 itextpdf.kern el.pdf.PdfWriter.writeToBody(PdfWriter.java:335) at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:243) at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument .java:1446) at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:155)at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:128)at com.itextpdf .kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:96) at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:489)at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage .java:448)at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:739)at com.itextpdf.layout.Document.close(Document.java:120)at gr.m oh.Pdf.main(Pdf.java:224)

我已經嘗試了很多,但是我找不到爲什麼會出現錯誤。如果我這樣做沒有循環它的作品。任何幫助?

PS:我使用的iText 7

+1

你似乎使用的多次運行某些PDF對象你的'//內容代碼在這裏'的循環,即多個目標PDF。這可能會導致例外情況。 – mkl

+0

謝謝!我在循環上面使用一個Style來爲段落分配字體。我將它們添加到循環中,它可以工作! –

回答

2

我有下面的代碼圈外的,它應該是進入循環...

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