From 4449f819b98e0d8fa1aade97fbfd536f8319ac79 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Tue, 29 Nov 2022 18:09:17 -0800 Subject: [PATCH 1/2] Implement missing XForm.Finish() method --- PdfSharpCore/Drawing/XForm.cs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/PdfSharpCore/Drawing/XForm.cs b/PdfSharpCore/Drawing/XForm.cs index 429873f4..b97c894a 100644 --- a/PdfSharpCore/Drawing/XForm.cs +++ b/PdfSharpCore/Drawing/XForm.cs @@ -177,6 +177,28 @@ protected override void Dispose(bool disposing) /// internal virtual void Finish() { + if (_formState == FormState.NotATemplate || _formState == FormState.Finished) + return; + + Debug.Assert(_formState == FormState.Created || _formState == FormState.UnderConstruction); + _formState = FormState.Finished; + Gfx.Dispose(); + Gfx = null; + + if (PdfRenderer != null) + { + //pdfForm.CreateStream(PdfEncoders.RawEncoding.GetBytes(PdfRenderer.GetContent())); + PdfRenderer.Close(); + Debug.Assert(PdfRenderer == null); + + if (_document.Options.CompressContentStreams) + { + _pdfForm.Stream.Value = Filtering.FlateDecode.Encode(_pdfForm.Stream.Value, _document.Options.FlateEncodeMode); + _pdfForm.Elements["/Filter"] = new PdfName("/FlateDecode"); + } + int length = _pdfForm.Stream.Length; + _pdfForm.Elements.SetInteger("/Length", length); + } } /// @@ -437,4 +459,4 @@ string IContentStream.GetFormName(XForm form) internal XGraphicsPdfRenderer PdfRenderer; } -} \ No newline at end of file +} From caf0757d66303669d2093fcf00dec3b5423bec08 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Fri, 16 Dec 2022 14:32:54 -0800 Subject: [PATCH 2/2] Remove Debug.Assert --- PdfSharpCore/Drawing/XForm.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/PdfSharpCore/Drawing/XForm.cs b/PdfSharpCore/Drawing/XForm.cs index b97c894a..c1dfaa03 100644 --- a/PdfSharpCore/Drawing/XForm.cs +++ b/PdfSharpCore/Drawing/XForm.cs @@ -180,7 +180,11 @@ internal virtual void Finish() if (_formState == FormState.NotATemplate || _formState == FormState.Finished) return; - Debug.Assert(_formState == FormState.Created || _formState == FormState.UnderConstruction); + if (!(_formState == FormState.Created || _formState == FormState.UnderConstruction)) + { + throw new InvalidOperationException("Expected the form to be Created or UnderConstruction"); + } + _formState = FormState.Finished; Gfx.Dispose(); Gfx = null; @@ -189,7 +193,6 @@ internal virtual void Finish() { //pdfForm.CreateStream(PdfEncoders.RawEncoding.GetBytes(PdfRenderer.GetContent())); PdfRenderer.Close(); - Debug.Assert(PdfRenderer == null); if (_document.Options.CompressContentStreams) {