【发布时间】:2011-10-23 09:06:57
【问题描述】:
我正在获取包含大量数据的巨大 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 会更好吗?
【问题讨论】:
-
Wolfram Alpha 表示,双面打印的 40,000 页文档的高度为 80 英寸 - 超过 2m。
-
只是好奇,这个 PDF 是什么?
-
stackoverflow.com/questions/656351/… 可能有助于尝试另一个或两个库,看看是否有更好的读取属性。
-
@Cicada:这可能是美国税法! :P
-
这是一组小型公用事业公司的发票。
标签: c# asp.net pdf itextsharp out-of-memory