private void FlushOrRelease(PdfObject obj)
 {
     if (release)
     {
         if (!obj.IsReleaseForbidden())
         {
             obj.Release();
         }
     }
     else
     {
         MakeIndirectIfNeeded(obj);
         if (!pdfDoc.IsAppendMode() || obj.IsModified())
         {
             obj.Flush();
         }
         else
         {
             if (!obj.IsReleaseForbidden())
             {
                 obj.Release();
             }
         }
     }
 }
        public virtual void AddingReleasedObjectToDocumentTest()
        {
            String      srcFile = sourceFolder + "releaseObjectsInSimpleDoc.pdf";
            PdfDocument doc     = new PdfDocument(new PdfReader(srcFile), new PdfWriter(sourceFolder + "addingReleasedObjectToDocument.pdf"
                                                                                        ));

            try {
                PdfObject releasedObj = doc.GetPdfObject(1);
                releasedObj.Release();
                doc.GetCatalog().Put(PdfName.Outlines, releasedObj);
            }
            finally {
                NUnit.Framework.Assert.That(() => {
                    doc.Close();
                }
                                            , NUnit.Framework.Throws.InstanceOf <PdfException>().With.Message.EqualTo("Cannot write object after it was released." + " In normal situation the object must be read once again before being written."))
                ;
            }
        }