首页 > 解决方案 > 如何使用 Apache PDFBOX 获取 PDF 大纲指向的位置

问题描述

我想使用 Apache PDFBOX 获得 PDF 大纲指向的位置,用于 groovy 脚本。

这个Groovy Script是用来获取注解并将它们分成大纲,但是当有多个大纲指向同一页面时,我不知道该注解属于哪个大纲。当我得到注释时,我有四点,他们给了我页面中的 Y 轴位置,我想得到轮廓点的位置类似的东西。

COSArray quadsArray = (COSArray) current.getCOSObject().getCOSArray(COSName.QUADPOINTS);对于我用来获取页面位置的注释,但对于大纲我得到空值。

public getBookmarkItem(PDOutlineNode bookmark, Integer indentation, bookmarksArray, thisDoc) {
    Integer destPage = 0
    PDOutlineItem current = bookmark.getFirstChild();
    indentation+=1;
    while (current != null) {
        def bookmarksMap = [page:destPage,level:0,title:'',pagePosition:0] 
        def destPageObj = current.findDestinationPage(thisDoc);
        def count=0
        for( PDPage pdfpage : thisDoc.getPages() ) {
            count+=1;
            if (pdfpage == destPageObj) {
                destPage=count;
                break;
            }
        }
        COSArray quadsArray = (COSArray) current.getCOSObject().getCOSArray(COSName.QUADPOINTS);
        println quadsArray.toString()

        bookmarksMap.page=destPage;
        bookmarksMap.level=indentation;
        bookmarksMap.title=current.getTitle();
        bookmarksArray << bookmarksMap;
        println "DESTINATION for " + bookmarksMap.title + ": " + destPage
        getBookmarkItem(current, indentation, bookmarksArray, thisDoc);
        current = current.getNextSibling();
    }
}

public getBookmarks(PDDocument thisDoc) {
    println "> Pegando Bookmarks"
    PDDocumentCatalog docCatalog = thisDoc.getDocumentCatalog();
    PDDocumentOutline docOutline = docCatalog.getDocumentOutline();
    def bookmarksArray = []
    if (docOutline != null) {
        getBookmarkItem(docOutline, 0, bookmarksArray, thisDoc);
    }
    println ">> Bookmarks pegos: " + bookmarksArray
    return bookmarksArray
}

标签: javapdfgroovypdfbox

解决方案


推荐阅读