java 读取PDF目录、对应页码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.pdfbox.io.RandomAccessBuffer;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineNode;

public class Pdf {
	
	public void printBookmarks(PDOutlineNode bookmark,String indentation) throws IOException{
		PDOutlineItem current = bookmark.getFirstChild();
		while(current != null){
			int pages = 0;
			if(current.getDestination() instanceof PDPageDestination){
				PDPageDestination pd = (PDPageDestination) current.getDestination();
				pages = pd.retrievePageNumber() + 1;
			}
			if (current.getAction()  instanceof PDActionGoTo) {
				PDActionGoTo gta = (PDActionGoTo) current.getAction();
				if (gta.getDestination() instanceof PDPageDestination) {
					PDPageDestination pd = (PDPageDestination) gta.getDestination();
					pages = pd.retrievePageNumber() + 1;
				}
			}
			if (pages == 0) {
				System.out.println(indentation+current.getTitle());
			}else{
				System.out.println(indentation+current.getTitle()+"  "+pages);
			}
			printBookmarks( current, indentation + "    " );
			current = current.getNextSibling();
		}
	}
	public static void main(String[] args) throws IOException {
		File file = new File("/Users/Desktop/pdf/CB.pdf");
		PDDocument doc = null;
		FileInputStream  fis = null;
		try {
			fis = new FileInputStream(file);
			PDFParser parser = new PDFParser(new RandomAccessBuffer(fis));
			parser.parse();
			doc = parser.getPDDocument();
			PDDocumentOutline outline = doc.getDocumentCatalog().getDocumentOutline();
			Pdf pdf = new Pdf();
			if (outline != null) {
				pdf.printBookmarks(outline, "");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值