diff --git a/PdfSharpCore/Drawing/XForm.cs b/PdfSharpCore/Drawing/XForm.cs index 429873f4..c1dfaa03 100644 --- a/PdfSharpCore/Drawing/XForm.cs +++ b/PdfSharpCore/Drawing/XForm.cs @@ -177,6 +177,31 @@ protected override void Dispose(bool disposing) /// internal virtual void Finish() { + if (_formState == FormState.NotATemplate || _formState == FormState.Finished) + return; + + 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; + + if (PdfRenderer != null) + { + //pdfForm.CreateStream(PdfEncoders.RawEncoding.GetBytes(PdfRenderer.GetContent())); + PdfRenderer.Close(); + + 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 +462,4 @@ string IContentStream.GetFormName(XForm form) internal XGraphicsPdfRenderer PdfRenderer; } -} \ No newline at end of file +}