/** * Retrieves the page labels from a PDF as an array of {@link PdfPageLabelFormat} objects. * @param reader a PdfReader object that has the page labels you want to retrieve * @return a PdfPageLabelEntry array, containing an entry for each format change * or <code>null</code> if no page labels are present */ 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; }
/** Adds or replaces a page label. */ public void AddPageLabel(PdfPageLabelFormat format) { AddPageLabel(format.physicalPage, format.numberStyle, format.prefix, format.logicalPage); }
/// <summary> /// Adds or replaces a page label. /// </summary> public void AddPageLabel(PdfPageLabelFormat format) { AddPageLabel(format.PhysicalPage, format.NumberStyle, format.Prefix, format.LogicalPage); }