我有一個PDF文檔,它可能是通過從另一個PDF文檔中提取幾頁來創建的。我想知道如何獲得頁碼。由於起始頁碼爲572,對於完整的PDF文檔應該是1.從PDF文件中提取頁碼
您是否認爲將PDF轉換爲XMl會對此問題進行排序?
我有一個PDF文檔,它可能是通過從另一個PDF文檔中提取幾頁來創建的。我想知道如何獲得頁碼。由於起始頁碼爲572,對於完整的PDF文檔應該是1.從PDF文件中提取頁碼
您是否認爲將PDF轉換爲XMl會對此問題進行排序?
最有可能的是該文件包含Document Catalog
中的/PageLabels
條目。此條目也指定頁碼的編號樣式和起始編號。
您可能需要更新起始號碼或完全刪除條目。下列文件中包含更多信息有關/PageLabels
項:如果你決定要更新條目
示例2文件中可能是有用的。
最後用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;
}
感謝您的回覆。但我實際上試圖從我的Java程序中訪問它。有沒有辦法從PDFReader對象獲取句柄? – Deb