当前位置: 首页 > 知识库问答 >
问题:

ITextSharp 内存不足异常合并多个 pdf

潘高洁
2023-03-14

我必须将多个1页pdf合并为一个pdf。我使用iTextSHarp 5.5.5.0来实现这一点,但当我合并超过900-1000个pdf时,会出现内存不足异常。我注意到,即使我释放并关闭阅读器,内存也不会得到正确的清理(进程使用的内存量永远不会减少),所以我想知道我可能做错了什么。这是我的代码:

 using (MemoryStream msOutput = new MemoryStream())
        {
            Document doc = new Document();
            PdfSmartCopy pCopy = new PdfSmartCopy(doc, msOutput);
            doc.Open();
            foreach (Tuple<string, int> file in filesList)
            {
                PdfReader pdfFile = new PdfReader(file.Item1);
                for (int j = 0; j < file.Item2; j++)
                    for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)//in this case it's always 1. 
                        pCopy.AddPage(pCopy.GetImportedPage(pdfFile, i));
                pCopy.FreeReader(pdfFile);
                pdfFile.Close();
                File.Delete(file.Item1);
            }
            pCopy.Close();
            doc.Close();

            byte[] content = msOutput.ToArray();
            using (FileStream fs = File.Create(Out))
            {
                fs.Write(content, 0, content.Length);
            }
        }

它从来没有开始写文件,我在p.Copy()过程中得到一个内存不足的异常。AddPage()部分。我甚至尝试刷新pCopy变量,但没有改变任何东西。我查看了iText的文档和围绕StackOverflow的各种问题,但我似乎采纳了所有建议来保持低内存使用率,但这并没有发生。对此有什么想法吗?

共有1个答案

戎洛城
2023-03-14

由于这是大量的东西,我建议直接写入文件而不是内存流。这可能是一个实际情况,其中内存不足异常的字面意思是“内存不足”。

此外,正如Bruno所指出的,不幸的是,PdfSmartCopy的“智能”部分也以内存为代价。切换到PdfCopy应该会减少内存压力,尽管您的最终PDF可能会更大。

 类似资料:
  • 我正在从命令行运行jmx

  • 问题内容: 我遇到一个问题,我正在提交一个包含少量数据的简单表单,当我在选项卡中检查ajax的URL似乎正常时,但是在处理了ajax之后,它会发出错误提示,并将其重定向到我的主页,并从控制台选项卡我有这个: 未捕获的异常:内存不足 在我的ajax中,我只有以下简单代码: 在我的PHP控制器中,我具有此功能 问题答案: 从您重定向到主页的描述,但是在ajax响应部分中没有执行此操作的代码,我怀疑元素

  • 我试图从多个内存流生成一个PDF文件,但在确定将2个PDF MemoryStream合并为一个PDF MemoryStream的正确方法时遇到了很多困难,该PDF MemoryStream包含来自两个源PDF MemoryStream的所有页面。这看起来很简单,我认为下面的代码设置正确,但生成的PDF内存流并不包含这两个文件的组合。 我很难确定将2个PDF MemoryStream合并为一个PDF

  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 如何处理要报告多个问题的文件上的多个异常。 我有一个多处理步骤的情况,其中不同的异常可以发生(例如,它们将在以后异步)。我使用(可能是快速失败的反模式)异常列表,然后一旦他们完成并检查异常 我有自己定制的异常类别(针对每个异步任务)(扩展类),但实现了一个接口,以包含消息特定的键值对等附加信息 示例实现 我的问题是,如果我知道我在每个任务中创建这些异常对象时会遇到什么问题,但我不会抛出它们。但如果

  • 问题内容: 我今天遇到一个奇怪的问题。对于其他人来说,这可能是一个简单的答案,但这让我感到困惑。为什么下面的代码会导致内存错误? 我得到了这两个错误之一…第一个是在节点的解释器中运行此代码时,第二个是通过nodeunit运行它时: 严重错误:CALL_AND_RETRY_2分配失败-内存不足 严重错误:JS分配失败-内存不足 问题答案: 当我尝试访问阵列时会发生这种情况。但是获取长度却没有。