我正在尝试编写一个脚本,以使用iText 7和c#将10,000个pdf合并到一个文件中。
我的测试文件每个大约5mb,在270个标记处,我开始获得System.OutOfMemoryException的-即使从任务管理器中看到我只使用了不到25%的可用内存。
这里有代码
string sourceFolder = @"C:\Work\Generated5\";
string outputPath = @"C:\Work\MergeTest.pdf";
int i = 0;
string[] files = Directory.GetFiles(sourceFolder,"*.pdf");
if (files.Length > 0)
{
Array.Sort(files);
using (PdfDocument pdf = new PdfDocument(new PdfWriter(outputPath)))
{
foreach (var file in files)
{
try
{
using (var reader = new PdfReader(file))
{
using (PdfDocument sourceDoc = new PdfDocument(reader))
{
sourceDoc.CopyPagesTo(1, sourceDoc.GetNumberOfPages(), pdf);
}
reader.Close();
}
}
catch (Exception e)
{
e.Message.Dump(file);
}
if (i % 200 == 0)
{
//desperate attempt to free some memory - doesn't really help
GC.Collect(3);
}
}
}
}
我在网上发现了许多示例,并且在此处执行此类操作时堆栈溢出。但是,我发现的文档和以前的答案已经过时,并且在iTextSharp和iText 5中已经过时。在iText 7中似乎不再支持使用的类,而我能够找到的唯一示例是“如何不合并。”
我尝试过的一些东西: