gpt4 book ai didi

java - IText5 - 使用相同内容和 SmartPdfCopy 创建 10000 页 PDF 时占用大量内存

转载 作者:行者123 更新时间:2023-11-30 06:47:08 25 4
gpt4 key购买 nike

我正在尝试使用单个模板 PDF 和 AcroForm 生成 10000 页 PDF,在此过程中我将填充值。

我的问题是,我遇到了 OOME,并且应用程序本身消耗了 4GB。如何降低内存消耗?

我如何创建我的内容:

public PDFBuilderItext5(InputStream templateSource) throws DocumentException, IOException {
templateBytes = readTemplateToBytes(templateSource);
// output = new ByteArrayOutputStream();
output = new BufferedOutputStream(new FileOutputStream("z:\\itext\\buff.pdf"));
document = new Document();
copy = new PdfSmartCopy(document, output);
document.open();
}

这是在循环中完成的:

ByteArrayOutputStream tempOut = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(templateBytes);
PdfStamper stamper = new PdfStamper(reader, tempOut);
try {
AcroFields fields = stamper.getAcroFields();
// fields.setGenerateAppearances(true);
Set<String> fieldNames = fields.getFields().keySet();
FieldValueBuilder fb = new FieldValueBuilder(t);
for (String fn : fieldNames) {
String label = fields.getField(fn);
String value = fb.valueFor(label);
fields.setField(fn, value,value);
}
stamper.setFormFlattening(true);

} finally {
stamper.close();
reader.close();
}
append(tempOut.toByteArray());

private synchronized void append(byte[] pdfContent) throws DocumentException, IOException{
PdfReader reader = new PdfReader(pdfContent);
copy.addDocument(reader);
reader.close();
notFlushedPagesCount++;
if(notFlushedPagesCount>=FLUSH_INTERVAL){
copy.flush();
System.out.println("Flushed copy");
notFlushedPagesCount=0;
}
}

我感觉我没有在某个地方释放一些资源,因为:

enter image description here

最佳答案

你永远不会“释放”读者。

例如:

private synchronized void append(byte[] pdfContent)
throws DocumentException, IOException{
PdfReader reader = new PdfReader(pdfContent);
copy.addDocument(reader);
copy.freeReader(reader);
reader.close();
}

关于java - IText5 - 使用相同内容和 SmartPdfCopy 创建 10000 页 PDF 时占用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com