/**
 * 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);
 }
Beispiel #3
0
 /// <summary>
 /// Adds or replaces a page label.
 /// </summary>
 public void AddPageLabel(PdfPageLabelFormat format)
 {
     AddPageLabel(format.PhysicalPage, format.NumberStyle, format.Prefix, format.LogicalPage);
 }