// 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); }
/// <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)); } }