public virtual void ReadFormXObjectsWithCircularReferencesInResources() { // given input file contains circular reference in resources of form xobjects // (form xobjects are nested inside each other) String input = sourceFolder + "circularReferencesInResources.pdf"; PdfReader reader1 = new PdfReader(input); PdfDocument inputPdfDoc1 = new PdfDocument(reader1); PdfPage page = inputPdfDoc1.GetPage(1); PdfResources resources = page.GetResources(); IList <PdfFormXObject> formXObjects = new List <PdfFormXObject>(); // We just try to work with resources in arbitrary way and make sure that circular reference // doesn't block it. However it is expected that PdfResources doesn't try to "look in deep" // and recursively resolves resources, so this test should never meet any issues. foreach (PdfName xObjName in resources.GetResourceNames(PdfName.XObject)) { PdfFormXObject form = resources.GetForm(xObjName); if (form != null) { formXObjects.Add(form); } } // ensure resources XObject entry is read correctly NUnit.Framework.Assert.AreEqual(2, formXObjects.Count); }
public virtual void GetNonExistentResourcesCategory() { PdfResources resources = new PdfResources(); ICollection <PdfName> unknownResCategory = resources.GetResourceNames(new PdfName("UnknownResCategory")); // Assert returned value is properly functioning PdfName randomResName = new PdfName("NonExistentResourceName"); NUnit.Framework.Assert.IsFalse(unknownResCategory.Contains(randomResName)); NUnit.Framework.Assert.IsFalse(unknownResCategory.Remove(randomResName)); NUnit.Framework.Assert.IsTrue(unknownResCategory.IsEmpty()); }
public virtual void ResourcesTest2() { MemoryStream baos = new MemoryStream(); PdfWriter writer = new PdfWriter(baos); PdfDocument document = new PdfDocument(writer); PdfPage page = document.AddNewPage(); PdfExtGState egs1 = new PdfExtGState(); PdfExtGState egs2 = new PdfExtGState(); PdfResources resources = page.GetResources(); resources.AddExtGState(egs1); resources.AddExtGState(egs2); document.Close(); PdfReader reader = new PdfReader(new MemoryStream(baos.ToArray())); document = new PdfDocument(reader, new PdfWriter(new ByteArrayOutputStream())); page = document.GetPage(1); resources = page.GetResources(); ICollection <PdfName> names = resources.GetResourceNames(); NUnit.Framework.Assert.AreEqual(2, names.Count); String[] expectedNames = new String[] { "Gs1", "Gs2" }; int i = 0; foreach (PdfName name in names) { NUnit.Framework.Assert.AreEqual(expectedNames[i++], name.GetValue()); } PdfExtGState egs3 = new PdfExtGState(); PdfName n3 = resources.AddExtGState(egs3); NUnit.Framework.Assert.AreEqual("Gs3", n3.GetValue()); PdfDictionary egsResources = page.GetPdfObject().GetAsDictionary(PdfName.Resources).GetAsDictionary(PdfName .ExtGState); PdfObject e1 = egsResources.Get(new PdfName("Gs1"), false); PdfName n1 = resources.AddExtGState(e1); NUnit.Framework.Assert.AreEqual("Gs1", n1.GetValue()); PdfObject e2 = egsResources.Get(new PdfName("Gs2")); PdfName n2 = resources.AddExtGState(e2); NUnit.Framework.Assert.AreEqual("Gs2", n2.GetValue()); PdfObject e4 = (PdfObject)e2.Clone(); PdfName n4 = resources.AddExtGState(e4); NUnit.Framework.Assert.AreEqual("Gs4", n4.GetValue()); document.Close(); }