itextpdf5.5.13版本讀取pdf文件的目錄標題與頁碼
1、導入pom的jar
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
2、 BookMark實體類
import java.io.Serializable;
/**
* 書籍標簽目錄實體
*/
public class BookMark implements Serializable {
public BookMark() {
}
public BookMark(int page, String title) {
this.page = page;
this.title = title;
}
/**
* 書的目錄標題
*/
private String title;
/**
* 書的目錄標題對應的頁面
*/
private int page;
//此處省略
// get/set方法
}
3、處理目錄標簽信息
private static void showBookmark(Map bookmark, List<BookMark> bookMarks) {
//讀起來的格式 {Action=GoTo, Title=封面, Page=1 XYZ 0 665 1.0}
String pageStr = (String) bookmark.get("Page");
String title = (String) bookmark.get("Title");
//此處可以使用判斷是否存在XYZ進行處理,防止不規(guī)范的目錄
int page = Integer.valueOf(pageStr.toUpperCase().split("XYZ")[0].replace(" ", ""));
bookMarks.add(new BookMark(page, title));
//判斷是否有子節(jié)點
ArrayList kids = (ArrayList) bookmark.get("Kids");
if (kids == null)
return;
for (Iterator i = kids.iterator(); i.hasNext(); ) {
showBookmark((Map) i.next(), bookMarks);
}
}
//遞歸打印pdf文件的標簽目錄信息
public static void printPdfMarkInfo(String filePath) {
try {
PdfReader reader = new PdfReader(filePath);
List list = SimpleBookmark.getBookmark(reader);
List<BookMark> bookMarks = new ArrayList<>();
for (Iterator i = list.iterator(); i.hasNext(); ) {
showBookmark((Map) i.next(), bookMarks);
}
/*
*此處是方便用面向對象處理數(shù)據(jù),看個人情況需要。
*/
for (BookMark bookMark : bookMarks) {
System.out.println(bookMark.getPage() + "-->" + bookMark.getTitle());
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
4、測試類
public class Test1 {
public static void main(String[] args) throws Exception {
String pdfPath = "D:\\test.pdf";
printPdfMarkInfo(pdfPath);
}
5、總結
此方法是學習使用過程中的筆記,并沒非工作中的實現(xiàn)代碼,每個人的需求不一樣,僅提供簡單的
demo的使用。