如何在不使用iText关闭的情况下读取和写入PDF文件

时间:2014-05-26 05:57:01

标签: pdf io itextsharp

我正在使用iTextSharp来操作PDF文档。

目前我正在阅读PDF(使用PDFReader和PDFStamper),写一些内容并关闭它。现在,这些过程得到了增加,PDF文档的阅读在我的应用程序中变得越来越重要。

我想只阅读一次PDF并在结尾处关闭它。问题是我还需要在每个进程之后在磁盘上更新文档(不关闭流)。我们怎样才能从itextsharp中获得这样的东西?

// ReadDocument()

// WriteForProcess1()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()

// WriteForProcess2()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()

// WriteForProcess3()
// UpdateDocumentOnDisk ()
// ViewUpdatedDoc()

// CloseDocument()

1 个答案:

答案 0 :(得分:3)

你想要的是不可能的:

如果我理解你,你想要

  1. 阅读基础PDF并为其打开PdfStamper;

  2. 多次

    a)操纵它(使用压模)和

    b)查看PDF的当前(操纵)状态;

  3. 并最终关闭PdfStamper并写下最终结果文件。

  4. 除非步骤2b中的PDF查看器能够仅使用标记PDF的状态的当前内存中表示来显示PDF(我不知道任何此类查看器),但步骤2b已经要求要关闭的压模和PDF完全写入文件系统。

    关闭压模后,您显然需要打开一个新的压模,而这个新压模必须基于使用当前文件内容初始化的PdfReader

    关于你的核心问题:

      

    阅读PDF文档正在成为我应用程序中的繁重操作。

    根据您在每次迭代中操作PDF的方式,可能没有必要解析整个现有PDF,例如如果您只操作一小部分页面或每次只附加新页面。

    如果是这种情况,您应该考虑使用PdfReader构造函数,该构造函数仅部分解析PDF并复制其余部分而无需解析资源。

    PS: OP评论道:

      

    RandomAccessFileOrArray中有什么?这是用来阅读部分文件的东西吗?它将文件读取时间从3秒急剧减少到300毫秒:)

    是的,接受PdfReader的{​​{1}}构造函数是以部分模式工作的构造函数,参见构造函数代码注释:

    RandomAccessFileOrArray