java - 使用 iText Java 循环创建新的 pdf

标签 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() 命令行出现以下异常:

Exception in thread "main" com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document. at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:184) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:174) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) at 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) 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.moh.Pdf.main(Pdf.java:224)

我已经尝试了很多,但我找不到为什么会出现错误。如果我不循环地执行它,它就可以工作。有什么帮助吗?

P.S:我使用itext 7

最佳答案

我将下面的代码放在循环之外,它应该进入循环......

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

关于java - 使用 iText Java 循环创建新的 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40760981/

相关文章:

java - java中的动态方法返回类型

java - 在gradle的应用程序插件生成的启动脚本中,如何将程序名称传递给应用程序?

java - 通过队列接口(interface)(例如 Java 中的 JMS)模拟阻塞函数调用

java - 如何使用 PDFBox 从 PDF 中删除特定图像

java - 使用 iText7 将多个表格打印到 pdf 上

java - 尝试计算 ArrayList 中的平均值

android:渲染pdf时出现BufferUnderflowException

r - 在 R 中,如何自动注释每个保存的图形?

c# - 使用 C# iText 7 拼合 XFA PDF

c# - ASP.NET无法使用itext7下载PDF(但可以保存到磁盘)