我正在使用iTextSharp来操作PDF文档。
目前我正在阅读PDF(使用PDFReader和PDFStamper),写一些内容并关闭它。现在,这些过程得到了增加,PDF文档的阅读在我的应用程序中变得越来越重要。
我想只阅读一次PDF并在结尾处关闭它。问题是我还需要在每个进程之后在磁盘上更新文档(不关闭流)。我们怎样才能从itextsharp中获得这样的东西?
// ReadDocument()
// WriteForProcess1()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()
// WriteForProcess2()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()
// WriteForProcess3()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()
// CloseDocument()
答案 0 :(得分:3)
你想要的是不可能的:
如果我理解你,你想要
阅读基础PDF并为其打开PdfStamper
;
多次
a)操纵它(使用压模)和
b)查看PDF的当前(操纵)状态;
并最终关闭PdfStamper
并写下最终结果文件。
除非步骤2b中的PDF查看器能够仅使用标记PDF的状态的当前内存中表示来显示PDF(我不知道任何此类查看器),但步骤2b已经要求要关闭的压模和PDF完全写入文件系统。
关闭压模后,您显然需要打开一个新的压模,而这个新压模必须基于使用当前文件内容初始化的PdfReader
。
关于你的核心问题:
阅读PDF文档正在成为我应用程序中的繁重操作。
根据您在每次迭代中操作PDF的方式,可能没有必要解析整个现有PDF,例如如果您只操作一小部分页面或每次只附加新页面。
如果是这种情况,您应该考虑使用PdfReader
构造函数,该构造函数仅部分解析PDF并复制其余部分而无需解析资源。
PS: OP评论道:
RandomAccessFileOrArray中有什么?这是用来阅读部分文件的东西吗?它将文件读取时间从3秒急剧减少到300毫秒:)
是的,接受PdfReader
的{{1}}构造函数是以部分模式工作的构造函数,参见构造函数代码注释:
RandomAccessFileOrArray