我正在使用必须读取100到200,000页pdf的iTextSharp做一些工作,并且为了创建pdfReader,somtimes可能需要10分钟才能完成!我一直在寻找一种只能一次阅读某些页面的方法,因此它不能同时存储整个pdf,但却无法找到任何内容。有没有人知道这是否可以在iTextSharp中使用?
答案 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 重要功能(如部分模式)应易于使用。