2016-11-23 4 views
2

Я хочу, чтобы создать новый PDF для каждой итерации цикла, так что я написал ниже код в Java:Создать PDF в цикле с 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++; 
} 

я получаю ниже исключение на линии document.close() команда:

Исключение в потоке "главный" 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) на ком. 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) at 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) at com.itextpdf.kernel.pdf.PdfPage.flush (PdfPage.java:489) в com.itextpdf.kernel.pdf.PdfPage.flush (PdfPage .java: 448) at com.itextpdf.kernel.pdf.PdfDocument.close (PdfDocument.java:739) по адресу com.itextpdf.layout.Document.close (Document.java:120) по адресу gr.m oh.Pdf.main (Pdf.java:224)

Я пробовал много, но я не могу найти, почему я получаю сообщение об ошибке. Если я делаю это без цикла, он работает. Любая помощь?

PS: я использую IText 7

+1

Вы появляетесь использовать некоторые объекты PDF в нескольких прогонов цикл в вашем // коде для содержимого здесь, т. е. для нескольких целевых PDF-файлов. Это может привести к таким исключениям, как ваш. – mkl

+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(); 
Смежные вопросы