Itextsharp仅pdf中某些页面的pdf阅读器

时间:2015-09-04 14:58:17

标签: c# .net itextsharp

我正在使用必须读取100到200,000页pdf的iTextSharp做一些工作,并且为了创建pdfReader,somtimes可能需要10分钟才能完成!我一直在寻找一种只能一次阅读某些页面的方法,因此它不能同时存储整个pdf,但却无法找到任何内容。有没有人知道这是否可以在iTextSharp中使用?

1 个答案:

答案 0 :(得分:1)

PDF格式允许您限制自己只阅读您感兴趣的部分,而不必阅读所有文件以查找特定信息。

如果iText(夏普)PdfReader部分模式中初始化,则可选择支持此功能,参见所有其他构造函数依赖的主构造函数

/**
 * Constructs a new PdfReader.  This is the master constructor.
 * @param byteSource source of bytes for the reader
 * @param partialRead if true, the reader is opened in partial mode (PDF is parsed on demand), if false, the entire PDF is parsed into memory as the reader opens
 * @param ownerPassword the password or null if no password is required
 * @param certificate the certificate or null if no certificate is required
 * @param certificateKey the key or null if no certificate key is required
 * @param certificateKeyProvider the name of the key provider, or null if no key is required
 * @param closeSourceOnConstructorError if true, the byteSource will be closed if there is an error during construction of this reader
 */
private PdfReader(IRandomAccessSource byteSource, bool partialRead, byte[] ownerPassword, X509Certificate certificate, ICipherParameters certificateKey, bool closeSourceOnConstructorError)

不幸的是,主构造函数是私有的。因此,我们必须寻找允许我们使用true作为bool partialRead的值的构造函数。允许这样做的公共构造者是:

public PdfReader(String filename, byte[] ownerPassword, bool partial)

[Obsolete("Use the constructor that takes a RandomAccessFileOrArray")]
public PdfReader(RandomAccessFileOrArray raf, byte[] ownerPassword)

(后者总是使用局部模式)。

因此,如果您从文件系统中打开PDF,请将前一个构造函数与partial = true一起使用,否则创建一个适当的RandomAccessFileOrArray实例并使用后一个实例。如果不需要密码,请设置ownerPassword = null

或者,一些内省/反射魔术可能允许您直接使用主构造函数

顺便说一句,后者的构造函数是@ChrisHaas在评论中指出的那个。不幸的是,它同时被宣布已弃用(也已废弃)。

Ceterum censeo 重要功能(如部分模式)应易于使用。