/// <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); }
public virtual iText.Kernel.Pdf.PdfPage SetResources(PdfResources pdfResources) { GetPdfObject().Put(PdfName.Resources, pdfResources.GetPdfObject()); this.resources = pdfResources; return(this); }