private void AddPagesFromDict(PdfObject dictRef, IList <PdfDictionary> pages, IList <RefKey> pagesRef) { PdfDictionary dict = (PdfDictionary)PdfReader.GetPdfObject(dictRef); if (dict.IsPages()) { PdfArray kids = dict.GetAsArray(PdfName.KIDS); if (kids == null) { return; } foreach (PdfObject kid in kids) { AddPagesFromDict(kid, pages, pagesRef); } } else if (dict.IsPage()) { pages.Add(dict); pagesRef.Add(new RefKey((PRIndirectReference)dictRef)); } }
private bool ObjectsIsEquals(PdfObject outObj, PdfObject cmpObj) { PdfObject outDirectObj = PdfReader.GetPdfObject(outObj); PdfObject cmpDirectObj = PdfReader.GetPdfObject(cmpObj); if (outDirectObj == null || cmpDirectObj.Type != outDirectObj.Type) { return(false); } if (cmpDirectObj.IsDictionary()) { PdfDictionary cmpDict = (PdfDictionary)cmpDirectObj; PdfDictionary outDict = (PdfDictionary)outDirectObj; if (cmpDict.IsPage()) { if (!outDict.IsPage()) { return(false); } RefKey cmpRefKey = new RefKey((PRIndirectReference)cmpObj); RefKey outRefKey = new RefKey((PRIndirectReference)outObj); if (cmpPagesRef.Contains(cmpRefKey) && cmpPagesRef.IndexOf(cmpRefKey) == outPagesRef.IndexOf(outRefKey)) { return(true); } return(false); } if (!ObjectsIsEquals(outDict, cmpDict)) { return(false); } } else if (cmpDirectObj.IsStream()) { if (!ObjectsIsEquals((PRStream)outDirectObj, (PRStream)cmpDirectObj)) { return(false); } } else if (cmpDirectObj.IsArray()) { if (!ObjectsIsEquals((PdfArray)outDirectObj, (PdfArray)cmpDirectObj)) { return(false); } } else if (cmpDirectObj.IsName()) { if (!ObjectsIsEquals((PdfName)outDirectObj, (PdfName)cmpDirectObj)) { return(false); } } else if (cmpDirectObj.IsNumber()) { if (!ObjectsIsEquals((PdfNumber)outDirectObj, (PdfNumber)cmpDirectObj)) { return(false); } } else if (cmpDirectObj.IsString()) { if (!ObjectsIsEquals((PdfString)outDirectObj, (PdfString)cmpDirectObj)) { return(false); } } else if (cmpDirectObj.IsBoolean()) { if (!ObjectsIsEquals((PdfBoolean)outDirectObj, (PdfBoolean)cmpDirectObj)) { return(false); } } else { throw new InvalidOperationException(); } return(true); }