示例#1
0
            /// <summary>Generates new (unique) resource name.</summary>
            /// <param name="resources">
            /// the
            /// <see cref="PdfResources"/>
            /// object for which name will be generated.
            /// </param>
            /// <returns>new (unique) resource name.</returns>
            public virtual PdfName Generate(PdfResources resources)
            {
                PdfName       newName = new PdfName(prefix + counter++);
                PdfDictionary r       = resources.GetPdfObject();

                if (r.ContainsKey(resourceType))
                {
                    while (r.GetAsDictionary(resourceType).ContainsKey(newName))
                    {
                        newName = new PdfName(prefix + counter++);
                    }
                }
                return(newName);
            }
        public virtual void ResourcesCategoryDictionarySetModifiedTest()
        {
            PdfDictionary pdfDict = new PdfDictionary();

            pdfDict.Put(PdfName.ExtGState, new PdfDictionary());
            PdfResources resources            = new PdfResources(pdfDict);
            PdfObject    resourceCategoryDict = resources.GetPdfObject().Get(PdfName.ExtGState);

            resourceCategoryDict.SetIndirectReference(new PdfIndirectReference(null, 1));
            NUnit.Framework.Assert.IsFalse(resourceCategoryDict.IsModified());
            resources.AddExtGState(new PdfExtGState());
            // Check that when changing an existing resource category dictionary, the flag PdfObject.MODIFIED will be set for it
            NUnit.Framework.Assert.IsTrue(resourceCategoryDict.IsModified());
        }
        private bool FlushPage(int pageNum)
        {
            PdfPage page = pdfDoc.GetPage(pageNum);

            if (page.IsFlushed())
            {
                return(false);
            }
            bool pageChanged = false;

            if (!release)
            {
                pdfDoc.DispatchEvent(new PdfDocumentEvent(PdfDocumentEvent.END_PAGE, page));
                InitCurrentLayers(pdfDoc);
            }
            PdfDictionary pageDict = page.GetPdfObject();
            // Using PdfPage package internal methods in order to avoid PdfResources initialization: initializing PdfResources
            // limits processing possibilities only to cases in which resources and specific resource type dictionaries are not flushed.
            PdfDictionary resourcesDict = page.InitResources(false);
            // inits /Resources dict entry if not inherited and not created yet
            PdfResources resources = page.GetResources(false);

            if (resources != null && resources.IsModified() && !resources.IsReadOnly())
            {
                resourcesDict = resources.GetPdfObject();
                pageDict.Put(PdfName.Resources, resources.GetPdfObject());
                pageDict.SetModified();
                pageChanged = true;
            }
            if (!resourcesDict.IsFlushed())
            {
                FlushDictRecursively(resourcesDict, null);
                FlushOrRelease(resourcesDict);
            }
            FlushDictRecursively(pageDict, pageContext);
            if (release)
            {
                if (!page.GetPdfObject().IsModified())
                {
                    pdfDoc.GetCatalog().GetPageTree().ReleasePage(pageNum);
                    page.UnsetForbidRelease();
                    page.GetPdfObject().Release();
                }
            }
            else
            {
                if (pdfDoc.IsTagged() && !pdfDoc.GetStructTreeRoot().IsFlushed())
                {
                    page.TryFlushPageTags();
                }
                if (!pdfDoc.IsAppendMode() || page.GetPdfObject().IsModified())
                {
                    page.ReleaseInstanceFields();
                    page.GetPdfObject().Flush();
                }
                else
                {
                    // it's append mode
                    pdfDoc.GetCatalog().GetPageTree().ReleasePage(pageNum);
                    page.UnsetForbidRelease();
                    page.GetPdfObject().Release();
                }
            }
            layersRefs.Clear();
            return(pageChanged);
        }
示例#4
0
 public virtual iText.Kernel.Pdf.PdfPage SetResources(PdfResources pdfResources)
 {
     GetPdfObject().Put(PdfName.Resources, pdfResources.GetPdfObject());
     this.resources = pdfResources;
     return(this);
 }