Itext 7 PDF - 与 Itext 5 不同,将图像添加到文档不会刷新到磁盘,而是保留在内存中
Itext 7 PDF - Adding image to document is not flushed to disk but stays in memory unlike Itext 5
我需要通过向其中添加多个图像来生成大尺寸 PDF。在 itext 5 中,如果我将图像添加到文档中,它会立即刷新到磁盘。但在 itext 7 中,它保留在内存中,只有在关闭文档后才会写入磁盘。
Itext 7 文档说使用大表概念 https://kb.itextpdf.com/home/it7kb/examples/large-tables ,我试过了,但它也没有将图像刷新到磁盘。
有人知道为什么吗?在此先感谢您的帮助。
itext 5 代码 (java)
Document document = new Document(PageSize.A4, 36, 36, 36, 72);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
document.open();
Image image1 = null;
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
InputStream is = new FileInputStream(f);
image1 = Image.getInstance(IOUtils.toByteArray(is));
document.add(image1);
}
document.close();
writer.close();
itext 7 代码 (java)
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("test.pdf"));
Document doc = new Document(pdfDoc);
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
doc.add(new Image(ImageDataFactory.create(f.getPath())));
}
doc.close();
这似乎在 iText 7 中没有按预期工作。我们需要进一步研究它(披露:我是 iText Software 的员工)。
同时,作为一种简单的解决方法,您可以显式刷新图像:
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
Image image = new Image(ImageDataFactory.create(f.getPath()));
image.getXObject().makeIndirect(pdfDoc).flush();
doc.add(image);
}
我需要通过向其中添加多个图像来生成大尺寸 PDF。在 itext 5 中,如果我将图像添加到文档中,它会立即刷新到磁盘。但在 itext 7 中,它保留在内存中,只有在关闭文档后才会写入磁盘。
Itext 7 文档说使用大表概念 https://kb.itextpdf.com/home/it7kb/examples/large-tables ,我试过了,但它也没有将图像刷新到磁盘。
有人知道为什么吗?在此先感谢您的帮助。
itext 5 代码 (java)
Document document = new Document(PageSize.A4, 36, 36, 36, 72);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
document.open();
Image image1 = null;
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
InputStream is = new FileInputStream(f);
image1 = Image.getInstance(IOUtils.toByteArray(is));
document.add(image1);
}
document.close();
writer.close();
itext 7 代码 (java)
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("test.pdf"));
Document doc = new Document(pdfDoc);
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
doc.add(new Image(ImageDataFactory.create(f.getPath())));
}
doc.close();
这似乎在 iText 7 中没有按预期工作。我们需要进一步研究它(披露:我是 iText Software 的员工)。
同时,作为一种简单的解决方法,您可以显式刷新图像:
for (int i = 0; i < 1000; i++) {
File f = new File("big_image.png");
Image image = new Image(ImageDataFactory.create(f.getPath()));
image.getXObject().makeIndirect(pdfDoc).flush();
doc.add(image);
}