【问题标题】:How to read and write to a PDF file without closing it using iText如何使用 iText 读取和写入 PDF 文件而不关闭它
【发布时间】:2014-05-26 05:57:00
【问题描述】:

我正在使用 iTextSharp 处理 PDF 文档。

目前我正在阅读 PDF(使用 PDFReader 和 PDFStamper),向其中写入内容并关闭它。现在流程增加了,阅读 PDF 文档正在成为我的应用程序中的一项繁重操作。

我只想阅读 PDF 一次并在最后关闭它。问题是我还需要在每个进程之后更新磁盘上的文档(不关闭流)。我们如何从 itextsharp 实现这样的目标?

// ReadDocument()

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

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

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

// CloseDocument()

【问题讨论】:

    标签: pdf io itextsharp


    【解决方案1】:

    你想要的都是不可能的:

    如果我理解正确的话,你想

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

    2. 多次

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

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

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

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

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

    关于您的核心问题:

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

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

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

    PS: OP 评论:

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

    是的,接受RandomAccessFileOrArrayPdfReader 构造函数是在部分模式下工作的构造函数,参见。构造函数代码注释:

        /**
        * Reads and parses a pdf document. Contrary to the other constructors only the xref is read
        * into memory. The reader is said to be working in "partial" mode as only parts of the pdf
        * are read as needed.
        * @param raf the document location
        * @param ownerPassword the password or <CODE>null</CODE> for no password
        * @throws IOException on error
        */
    

    【讨论】:

    • 另外:为什么OP在每次操作后都需要on disk文件?从一般的角度来看,将其保存在内存中会更有意义(但当然:我们不知道确切的用例)。
    • @BrunoLowagie 另外:为什么 OP 在每次操作后都需要磁盘上的文档? - 我假设他的 PDF 查看器需要文件的磁盘表示。跨度>
    • @BrunoLowagie 我正在使用 AcroPDFLib 加载 PDF 文件,它只支持文件路径来加载文档。
    • RandomAccessFileOrArray 中有什么?这是用来阅读部分文档的东西吗?它将文件读取时间从 3 秒大幅减少到 300 毫秒 :) @mkl
    • 这正是使用部分模式的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 2019-06-30
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多