2013-05-31 5 views
1

У меня есть документ PDF, который может быть создан путем извлечения нескольких страниц из другого документа PDF. Мне интересно, как мне получить номер страницы. В качестве номера начальной страницы 572, который для полного PDF-документа должен был быть равен 1.Извлечь номер страницы из файла PDF

Вы думаете, что преобразование PDF в XMl будет сортировать эту проблему?

ответ

1

Возможно, документ содержит /PageLabels запись в Document Catalog. Эта запись также указывает стиль нумерации номеров страниц и стартового номера.

Возможно, вам придется обновить начальный номер или полностью удалить запись. Следующий документ содержит более подробную информацию о /PageLabels запись:

пример 2 в документе может быть полезно, если вы решили обновить запись.

+0

Благодарим за отзыв. Но я действительно пытаюсь получить к нему доступ из моей программы Java. Есть ли способ получить доступ к нему из объекта PDFReader? – Deb

1

Наконец-то выяснилось, используя iText. Было бы невозможно без подсказки Бовровского. Тонны благодарности ему. Проводка кода:

public void process(PdfReader reader) { 
    PRIndirectReference obj = (PRIndirectReference) dict.get(com.itextpdf.text.pdf.PdfName.PAGELABELS); 
    System.out.println(obj.getNumber()); 
    PdfObject ref = reader.getPdfObject(obj.getNumber()); 
    PdfArray array = (PdfArray)((PdfDictionary) ref).get(com.itextpdf.text.pdf.PdfName.NUMS); 
    System.out.println("Start Page: " + resolvePdfIndirectReference(array, reader)); 
} 

private static int resolvePdfIndirectReference(PdfObject obj, PdfReader reader) { 
    if (obj instanceof PdfArray) { 
     PdfDictionary subDict = null; 
     PdfIndirectReference indRef = null; 
     ListIterator <PdfObject> itr = ((PdfArray) obj).listIterator(); 
     while (itr.hasNext()) { 
      PdfObject pdfObj = itr.next(); 
      if (pdfObj instanceof PdfIndirectReference) 
       indRef = (PdfIndirectReference) pdfObj; 
      if (pdfObj instanceof PdfDictionary) { 
       subDict = (PdfDictionary) pdfObj; 
       break; 
      } 
     } 
     if (subDict != null) { 
      return resolvePdfIndirectReference(subDict, reader); 
     } else if (indRef != null) 
      return resolvePdfIndirectReference(indRef, reader); 
    } else if (obj instanceof PdfIndirectReference) { 
     PdfObject ref = reader.getPdfObject(((PdfIndirectReference) obj).getNumber()); 
     return resolvePdfIndirectReference(ref, reader); 
    } else if (obj instanceof PdfDictionary) { 
     PdfNumber num = (PdfNumber)((PdfDictionary) obj).get(com.itextpdf.text.pdf.PdfName.ST); 
     return num.intValue(); 
    } 
    return 0; 
} 
Смежные вопросы