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-SNAPSHOT
和 7.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 行相比被认为是重大升级。
我在升级到最新版本的 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-SNAPSHOT
和 7.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 行相比被认为是重大升级。