微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

升级到适用于 .NET 的最新版 iText (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 关闭外部提供的输入流?或者任何将采用“leaveOpen”参数 like .NET StreamReader does 的新构造函数 API 的机会。

解决方法

该错误已在 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.2.0-SNAPSHOT 相比,7.1.16-SNAPSHOT 版本包含重大更改,因为与 7.1.x 行相比,7.2.x 行被视为重大升级。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。