gpt4 book ai didi

pdf - 如何在不消耗内存的情况下进行流式 PDF 合并?

转载 作者:行者123 更新时间:2023-12-05 06:36:56 24 4
gpt4 key购买 nike

我需要将许多小的 pdf 文件合并为一个大的 pdf (~200G)。而且我找不到可以在不占用我所有内存的情况下完成此操作的库/工具。

我看了 itext、pdfbox、pdftk。但似乎所有这些都将文件存储在内存中。根据 pdf 文件结构,应该很容易按顺序获取输入文档流并写入结果文件,只在内存中保留外部参照表。

我用来测试 iText 的代码。每下一个文件,它都会消耗越来越多的内存:

public static void MergePDFs(String[] fileNames, String targetPdf) throws IOException, DocumentException {
FileOutputStream stream = new FileOutputStream(targetPdf);
Document document = new Document();
PdfCopy pdf = new PdfCopy(document, stream);
PdfReader reader = null;
document.open();
for (String file : fileNames) {
reader = new PdfReader(file);
pdf.addDocument(reader);
pdf.freeReader(reader);
reader.close();
}
if (reader != null) {
reader.close();
}
document.close();
stream.close();
}

最佳答案

一种策略是以 10 个文件为一组合并,然后合并中间文件。根据需要采取尽可能多的中间步骤。例如:

  • 第 0 步:1 页 1000 个文件
  • 第 1 步:10 页的 100 个文件
  • 第 2 步:10 个文件,每页 100 页
  • 第 3 步:1 个 1000 页的文件

没有固定的规则,我说的是 10,但也许最适合您的解决方案是每 8 或每 14,您将不得不进行试验。

理论上,您甚至可以在不同的机器上并行运行中间步骤,这可以显着加快合并速度,但代价是需要更多硬件。

我的答案是通用的,适用于任何 pdf 库,但在 iText Software,我们所做的研究表明这种策略速度更快,内存消耗更少。

关于pdf - 如何在不消耗内存的情况下进行流式 PDF 合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48643074/

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