Beispiel #1
0
        // Fill pages information
        private void PopulatePages(PdfObject pagesObj)
        {
            var pageRefs  = pagesObj.GetAttributeValue <PdfArray>("Kids");
            int kidsCount = pageRefs.Count / 3;

            // Nested page elements
            for (int i = 0; i < kidsCount; i++)
            {
                var kidPageObj = ObjectRoot.GetObjectByRef(pageRefs, i);

                if (kidPageObj.Type == "Page")
                {
                    Pages.Add(new PdfPage(this, kidPageObj));

                    // Font resources in Page obj
                    PopulateFonts(kidPageObj);
                }
                else if (kidPageObj.Type == "Pages")
                {
                    // Nested pages (?)
                    PopulatePages(kidPageObj);
                }
            }

            // Font resources in Pages obj
            PopulateFonts(pagesObj);
        }
Beispiel #2
0
        /// <summary>
        /// Get direct or indirect object from attributes dictionary
        /// </summary>
        /// <param name="parentObj">Object that contains sought object</param>
        /// <param name="keyName">Object name</param>
        /// <returns>Object by specified name</returns>
        public PdfObject GetObjectFromAttrib(PdfObject parentObj, string keyName)
        {
            var childObj = parentObj.GetAttributeValue(keyName);

            if (childObj == null)
            {
                // No nested object found with given name
                return(null);
            }
            else if (childObj is PdfSequence)
            {
                // Indirect object
                return(GetObjectByRef(childObj as PdfArray));
            }
            else
            {
                // Wrap value in temporary object
                return(PdfObject.CreateAsWrappedContent(childObj));
            }
        }