使用iText Java创建新的pdf循环

时间:2016-11-23 09:51:36

标签: java pdf itext7

我想为循环的每次迭代创建一个新的pdf,所以我在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++;
}

我在document.close()命令的行上得到以下异常:

  

线程“main”中的异常com.itextpdf.kernel.PdfException:Pdf   间接对象​​属于其他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)     at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:335)     at 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)at   com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:128)at at   com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:96)     在com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:489)at   com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:448)at at   com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:739)at at   com.itextpdf.layout.Document.close(Document.java:120)at   gr.moh.Pdf.main(Pdf.java:224)

我已经尝试了很多,但我找不到为什么我会收到错误。如果我没有循环它,它的工作原理。有什么帮助吗?

P.S:我使用itext 7

1 个答案:

答案 0 :(得分: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();