我正在获取包含大量数据的巨大PDF文件。当前的PDF为350 MB,约有40000页。当然,获得较小的PDF也很好,但这是我现在必须使用的:-(
加载时,我可以在Acrobat Reader中打开它,但会有些延迟,但是之后Acrobat Reader很快。
现在,我需要将巨大的文件拆分为单个页面,然后尝试从pdf页面中读取一些收件人数据,然后将每个收件人应该获取的一个或两个页面发送给每个特定收件人。
到目前为止,这是我使用itextsharp的非常小的代码:
var inFileName = @"huge350MB40000pages.pdf";
PdfReader reader = new PdfReader(inFileName);
var nbrPages = reader.NumberOfPages;
reader.Close();
发生的事情是到第二行“new PdfReader”,然后在那里停留了大约10分钟,该过程的大小达到了约1.7 GB,然后出现了OutOfMemoryException。
我认为“新PdfReader”试图将整个PDF读取到内存中。
还有其他/更好的方法吗?
例如,我可以以某种方式仅将PDF文件的一部分读取到内存中,而不是一次读取全部吗?
使用itextsharp可以使用其他库更好地工作吗?
最佳答案
从我所阅读的内容来看,在实例化PdfReader时看起来应该使用带RandomAccessFileOrArray对象的构造函数。免责声明:我自己还没有尝试过。
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(new iTextSharp.text.pdf.RandomAccessFileOrArray(@"C:\PDFFile.pdf"), null);