예제 #1
0
        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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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();
        }