Finally realized using iText. There would be no without Bovrovsky hint. Tons of thanks to him. Code Posting:
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; }
source share