2016-11-23 79 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();