iText 7 - PdfReader 构造函数中的解析异常意外关闭输入流

iText 7 - Parsing exception in PdfReader constructor closes the input stream unexpectedly

我在升级到最新版本的 iText for .NET (7.1.15 -> 7.1.16) 后遇到问题。

请参阅下面的示例代码:

Stream pdfStream = GetPdfStream(...);

try
{
    IRandomAccessSource randomAccessSource = new RandomAccessSourceFactory().CreateSource(pdfStream);
    ReaderProperties readerProperties = new ReaderProperties
    {
        // ...
    };

    using (var pdfReader = new PdfReader(randomAccessSource, readerProperties))
    {
        pdfReader.SetCloseStream(false);

        // do things with pdfReader
    }
}
catch
{
    // ...
}

// reuse pdfStream somewhere else

在这种情况下,如果无法解析文件,我会遇到异常(预期):

iText.IO.IOException: PDF header not found.
   at iText.Kernel.Pdf.PdfReader.GetOffsetTokeniser(IRandomAccessSource byteSource)
   at iText.Kernel.Pdf.PdfReader..ctor(IRandomAccessSource byteSource, ReaderProperties properties)

但作为一个意想不到的副作用,它还关闭了输入流,这在以前的版本 (7.1.15) 中没有发生。因为异常发生在 PdfReader 构造函数中,它还不能达到 pdfReader.SetCloseStream.

有什么办法可以防止PdfReader关闭外部提供的输入流吗?或者新构造函数 API 的任何机会都将采用 'leaveOpen' 参数 like .NET StreamReader does.

该错误已在 7.2.0-SNAPSHOT7.1.17-SNAPSHOT 版本中修复。 您可以使用以下 Maven 配置从 iText Artifactory 获取这些版本:

<repositories>
  <repository>
    <id>itext-snapshot</id>
    <name>iText Repository - snapshots</name>
    <url>https://repo.itextsupport.com/snapshot</url>
  </repository>
<repositories>

请注意,与 7.1.16-SNAPSHOT 相比,7.2.0-SNAPSHOT 版本包含重大更改,因为 7.2.x 行与 7.1.x 行相比被认为是重大升级。