feat(pdf): add option to preserve input stream on disposal
- Introduced `disposeInputStream` parameter in `Pdf<TInputStream, TOutputStream>` constructor. - Updated `Dispose` and `DisposeAsync` to conditionally dispose the input stream based on this flag. - Updated `Pdf.FromMemory(MemoryStream)` to not dispose the provided MemoryStream by default. - Ensures better control over resource management when reusing input streams.
This commit is contained in:
parent
241e59fc7e
commit
c456d67d03
@ -20,7 +20,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
|
|
||||||
public static Pdf<MemoryStream, MemoryStream> FromMemory(MemoryStream stream)
|
public static Pdf<MemoryStream, MemoryStream> FromMemory(MemoryStream stream)
|
||||||
{
|
{
|
||||||
return new Pdf<MemoryStream, MemoryStream>(stream, new MemoryStream());
|
return new Pdf<MemoryStream, MemoryStream>(stream, new MemoryStream(), disposeInputStream: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,13 +34,16 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
private readonly PdfReader _reader;
|
private readonly PdfReader _reader;
|
||||||
private readonly PdfWriter _writer;
|
private readonly PdfWriter _writer;
|
||||||
|
|
||||||
public Pdf(TInputStream inputStream, TOutputStream outputStream)
|
private readonly bool _disposeInputStream;
|
||||||
|
|
||||||
|
public Pdf(TInputStream inputStream, TOutputStream outputStream, bool disposeInputStream = true)
|
||||||
{
|
{
|
||||||
_inputStream = inputStream;
|
_inputStream = inputStream;
|
||||||
_outputStream = outputStream;
|
_outputStream = outputStream;
|
||||||
_reader = new PdfReader(inputStream);
|
_reader = new PdfReader(inputStream);
|
||||||
_writer = new PdfWriter(outputStream);
|
_writer = new PdfWriter(outputStream);
|
||||||
_doc = new PdfDocument(_reader, _writer);
|
_doc = new PdfDocument(_reader, _writer);
|
||||||
|
_disposeInputStream = disposeInputStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -152,7 +155,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
{
|
{
|
||||||
// Managed resources
|
// Managed resources
|
||||||
_doc?.Close();
|
_doc?.Close();
|
||||||
_inputStream?.Dispose();
|
if (_disposeInputStream) _inputStream?.Dispose();
|
||||||
_outputStream?.Dispose();
|
_outputStream?.Dispose();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -160,7 +163,7 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
// When called by the finalizer, clean up only unmanaged resources
|
// When called by the finalizer, clean up only unmanaged resources
|
||||||
// Unmanaged resources such as PdfDocument, PdfReader, and PdfWriter are already IDisposable; we close them here
|
// Unmanaged resources such as PdfDocument, PdfReader, and PdfWriter are already IDisposable; we close them here
|
||||||
try { _doc?.Close(); } catch { }
|
try { _doc?.Close(); } catch { }
|
||||||
try { _inputStream?.Dispose(); } catch { }
|
try { if(_disposeInputStream) _inputStream?.Dispose(); } catch { }
|
||||||
try { _outputStream?.Dispose(); } catch { }
|
try { _outputStream?.Dispose(); } catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,10 +176,13 @@ namespace EnvelopeGenerator.PdfEditor
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
_doc?.Close();
|
_doc?.Close();
|
||||||
if (_inputStream is IAsyncDisposable asyncInput)
|
if (_disposeInputStream)
|
||||||
await asyncInput.DisposeAsync();
|
{
|
||||||
else
|
if (_inputStream is IAsyncDisposable asyncInput)
|
||||||
_inputStream.Dispose();
|
await asyncInput.DisposeAsync();
|
||||||
|
else
|
||||||
|
_inputStream.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
if (_outputStream is IAsyncDisposable asyncOutput)
|
if (_outputStream is IAsyncDisposable asyncOutput)
|
||||||
await asyncOutput.DisposeAsync();
|
await asyncOutput.DisposeAsync();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user