java - 如何使用 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
}
解决方案
推荐阅读
- docker - 将 SoftHSM 库暴露给在主机中运行的代码
- sql-server - 用于操作 SQL 备份的 DevOps 或 SQLDataFactory 管道
- azure - 不支持输入 URI 的方案
- ansible - 在 Satellite 6.4 中未找到任何 ansible 角色 - 已安装系统角色
- excel - 如何使用 VBA 在指定范围内选择与另一个单元格的值匹配的单元格?
- r - 如何在闪亮中创建一个函数以在 lapply 中使用?
- r - Dcast() 奇怪的输出
- c# - 如何加密 id 查询字符串参数
- javascript - 如何通过迭代计算时间
- jquery - 需要获取通过ajax调用发回的部分html数据