internal int ReorderPages(int[] order)
{
if (order == null)
return pages.Count;
if (parents.Count > 1)
throw new DocumentException(MessageLocalization.GetComposedMessage("page.reordering.requires.a.single.parent.in.the.page.tree.call.pdfwriter.setlinearmode.after.open"));
if (order.Length != pages.Count)
throw new DocumentException(MessageLocalization.GetComposedMessage("page.reordering.requires.an.array.with.the.same.size.as.the.number.of.pages"));
int max = pages.Count;
bool[] temp = new bool[max];
for (int k = 0; k < max; ++k) {
int p = order[k];
if (p < 1 || p > max)
throw new DocumentException(MessageLocalization.GetComposedMessage("page.reordering.requires.pages.between.1.and.1.found.2", max, p));
if (temp[p - 1])
throw new DocumentException(MessageLocalization.GetComposedMessage("page.reordering.requires.no.page.repetition.page.1.is.repeated", p));
temp[p - 1] = true;
}
PdfIndirectReference[] copy = pages.ToArray();
for (int k = 0; k < max; ++k) {
pages[k] = copy[order[k] - 1];
}
return max;
}