2013-05-31 3 views
1

다른 PDF 문서에서 몇 페이지를 추출하여 생성 된 PDF 문서가 있습니다. 나는 페이지 번호를 어떻게 얻는 지 궁금하다. 시작 페이지 번호가 572이므로 전체 PDF 문서의 경우 1이어야합니다.PDF 파일에서 페이지 번호 추출하기

PDF를 XMl로 변환하면이 문제가 해결 될 것으로 생각하십니까?

답변

1

대부분 문서에 /PageLabels 항목이 포함되어 있습니다 (Document Catalog). 이 항목은 페이지 번호와 시작 번호의 번호 스타일을 지정합니다.

시작 번호를 업데이트하거나 항목을 완전히 삭제해야 할 수 있습니다. 당신이 항목을 업데이트하기로 결정한 경우 문서의

예 2는 유용 할 수 있습니다 : 다음 문서는 추가 정보에 대한 /PageLabels 항목이 포함되어 있습니다.

+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; 
} 
관련 문제