public static PdfPageLabelFormat[] GetPageLabelFormats(PdfReader reader)
{
PdfDictionary dict = reader.Catalog;
PdfDictionary labels = (PdfDictionary)PdfReader.GetPdfObjectRelease(dict.Get(PdfName.PAGELABELS));
if (labels == null)
return null;
Dictionary<int, PdfObject> numberTree = PdfNumberTree.ReadTree(labels);
int[] numbers = new int[numberTree.Count];
numberTree.Keys.CopyTo(numbers, 0);
Array.Sort(numbers);
PdfPageLabelFormat[] formats = new PdfPageLabelFormat[numberTree.Count];
String prefix;
int numberStyle;
int pagecount;
for (int k = 0; k < numbers.Length; ++k) {
int key = numbers[k];
PdfDictionary d = (PdfDictionary)PdfReader.GetPdfObjectRelease(numberTree[key]);
if (d.Contains(PdfName.ST)) {
pagecount = ((PdfNumber)d.Get(PdfName.ST)).IntValue;
} else {
pagecount = 1;
}
if (d.Contains(PdfName.P)) {
prefix = ((PdfString)d.Get(PdfName.P)).ToUnicodeString();
} else {
prefix = "";
}
if (d.Contains(PdfName.S)) {
char type = ((PdfName)d.Get(PdfName.S)).ToString()[1];
switch (type) {
case 'R': numberStyle = UPPERCASE_ROMAN_NUMERALS; break;
case 'r': numberStyle = LOWERCASE_ROMAN_NUMERALS; break;
case 'A': numberStyle = UPPERCASE_LETTERS; break;
case 'a': numberStyle = LOWERCASE_LETTERS; break;
default: numberStyle = DECIMAL_ARABIC_NUMERALS; break;
}
} else {
numberStyle = EMPTY;
}
formats[k] = new PdfPageLabelFormat(key + 1, numberStyle, prefix, pagecount);
}
return formats;
}