internal void OutlineTree(PdfOutline outline)
{
outline.IndirectReference = writer.PdfIndirectReference;
if (outline.Parent != null)
outline.Put(PdfName.PARENT, outline.Parent.IndirectReference);
List<PdfOutline> kids = outline.Kids;
int size = kids.Count;
for (int k = 0; k < size; ++k)
OutlineTree(kids[k]);
for (int k = 0; k < size; ++k) {
if (k > 0)
kids[k].Put(PdfName.PREV, kids[k - 1].IndirectReference);
if (k < size - 1)
kids[k].Put(PdfName.NEXT, kids[k + 1].IndirectReference);
}
if (size > 0) {
outline.Put(PdfName.FIRST, ((PdfOutline)kids[0]).IndirectReference);
outline.Put(PdfName.LAST, ((PdfOutline)kids[size - 1]).IndirectReference);
}
for (int k = 0; k < size; ++k) {
PdfOutline kid = (PdfOutline)kids[k];
writer.AddToBody(kid, kid.IndirectReference);
}
}