protected internal PRIndirectReference GetSinglePage(int n) {
PdfDictionary acc = new PdfDictionary();
PdfDictionary top = reader.rootPages;
int baseb = 0;
while (true) {
for (int k = 0; k < pageInhCandidates.Length; ++k) {
PdfObject obj = top.Get(pageInhCandidates[k]);
if (obj != null)
acc.Put(pageInhCandidates[k], obj);
}
PdfArray kids = (PdfArray)PdfReader.GetPdfObjectRelease(top.Get(PdfName.KIDS));
for (ListIterator it = new ListIterator(kids.ArrayList); it.HasNext();) {
PRIndirectReference refi = (PRIndirectReference)it.Next();
PdfDictionary dic = (PdfDictionary)GetPdfObject(refi);
int last = reader.lastXrefPartial;
PdfObject count = GetPdfObjectRelease(dic.Get(PdfName.COUNT));
reader.lastXrefPartial = last;
int acn = 1;
if (count != null && count.Type == PdfObject.NUMBER)
acn = ((PdfNumber)count).IntValue;
if (n < baseb + acn) {
if (count == null) {
dic.MergeDifferent(acc);
return refi;
}
reader.ReleaseLastXrefPartial();
top = dic;
break;
}
reader.ReleaseLastXrefPartial();
baseb += acn;
}
}
}