diff --git a/EnvelopeGenerator.PdfEditor/Pdf.cs b/EnvelopeGenerator.PdfEditor/Pdf.cs index e539338c..637d777e 100644 --- a/EnvelopeGenerator.PdfEditor/Pdf.cs +++ b/EnvelopeGenerator.PdfEditor/Pdf.cs @@ -20,7 +20,7 @@ namespace EnvelopeGenerator.PdfEditor public static Pdf FromMemory(MemoryStream stream) { - return new Pdf(stream, new MemoryStream()); + return new Pdf(stream, new MemoryStream(), disposeInputStream: false); } } @@ -34,13 +34,16 @@ namespace EnvelopeGenerator.PdfEditor private readonly PdfReader _reader; 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; _outputStream = outputStream; _reader = new PdfReader(inputStream); _writer = new PdfWriter(outputStream); _doc = new PdfDocument(_reader, _writer); + _disposeInputStream = disposeInputStream; } /// @@ -152,7 +155,7 @@ namespace EnvelopeGenerator.PdfEditor { // Managed resources _doc?.Close(); - _inputStream?.Dispose(); + if (_disposeInputStream) _inputStream?.Dispose(); _outputStream?.Dispose(); } else @@ -160,7 +163,7 @@ namespace EnvelopeGenerator.PdfEditor // 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 try { _doc?.Close(); } catch { } - try { _inputStream?.Dispose(); } catch { } + try { if(_disposeInputStream) _inputStream?.Dispose(); } catch { } try { _outputStream?.Dispose(); } catch { } } @@ -173,10 +176,13 @@ namespace EnvelopeGenerator.PdfEditor return; _doc?.Close(); - if (_inputStream is IAsyncDisposable asyncInput) - await asyncInput.DisposeAsync(); - else - _inputStream.Dispose(); + if (_disposeInputStream) + { + if (_inputStream is IAsyncDisposable asyncInput) + await asyncInput.DisposeAsync(); + else + _inputStream.Dispose(); + } if (_outputStream is IAsyncDisposable asyncOutput) await asyncOutput.DisposeAsync();