gpt4 book ai didi

java - 无法使用 PDFBOX 获取页面中书签的具体位置

转载 作者:行者123 更新时间:2023-11-30 05:26:20 24 4
gpt4 key购买 nike

我正在使用 PDFBOX 2.0.2 jar 在现有标题书签 PDF 文件中添加多个 PDF。同样,我将其拆分并合并其他 PDF。

Splitter splitter = new Splitter();
splitter.setStartPage(1);
splitter.setEndPage(noOfPagesInHeadingBkmrkedPDF);

在拆分和合并之前,我将所有书签保留在 HashMap 中,键为 pageNumber,值作为书签名称。合并后,我正在设置书签 w.r.t.我的查询是 - 如何获取页面上书签的特定坐标(位置),以便合并后我应该能够将其设置回页面的特定位置。

在分割之前创建 HashMap 的代码片段:

public void getAllBookmarks(PDOutlineNode bookmarksInOriginalFile, String emptyString, Map<Integer, String> bookmarkMap) throws IOException {
PDOutlineItem current = null;
if (null != bookmarksInOriginalFile)
current = bookmarksInOriginalFile.getFirstChild();
while (current != null) {
Integer pageNumber = 0;
PDPageDestination pd = null;
if (current.getDestination() instanceof PDPageDestination) {
pd = (PDPageDestination) current.getDestination();
pageNumber = (pd.retrievePageNumber() + 1); // Do we have any method available to get the location on the specific page ??
}
if (current.getAction() instanceof PDActionGoTo) {
PDActionGoTo gta = (PDActionGoTo) current.getAction();
if (gta.getDestination() instanceof PDPageDestination) {
pd = (PDPageDestination) gta.getDestination();
pageNumber = (pd.retrievePageNumber() + 1);
}
}
String bookmarkName = emptyString + current.getTitle();
if(null!=bookmarkName && !EMPTY_STRING.equalsIgnoreCase(bookmarkName)){
bookmarkMap.put(pageNumber-1,bookmarkName);
}

getAllBookmarks(current, emptyString,bookmarkMap);
current = current.getNextSibling();
}
}

任何帮助将不胜感激。

谢谢...

最佳答案

因为我能够使用@TilmanHausherr 建议来解决我的解决方案。我正在回答我的问题。我更改了以下代码:

public void getAllBookmarks(PDOutlineNode bookmarksInOriginalFile, String emptyString, Map<Integer,BookmarkMetaDataBO> bookmarkMap) throws IOException {
PDOutlineItem current = null;
if (null != bookmarksInOriginalFile)
current = bookmarksInOriginalFile.getFirstChild();
while (current != null) {
Integer pageNumber = 0;
PDPageDestination pd = null;
PDPageXYZDestination pdx = null;
// These value will give the specific location
**int left = 0;
int top = 0;**
if (current.getDestination() instanceof PDPageXYZDestination) {
pdx = (PDPageXYZDestination) current.getDestination();
pageNumber = (pdx.retrievePageNumber() + 1);
**left = pdx.getLeft();
top = pdx.getTop();**
}
if (current.getAction() instanceof PDActionGoTo) {
PDActionGoTo gta = (PDActionGoTo) current.getAction();
if (gta.getDestination() instanceof PDPageDestination) {
pd = (PDPageDestination) gta.getDestination();
pageNumber = (pd.retrievePageNumber() + 1);
}
}
String bookmarkName = emptyString + current.getTitle();
if(null!=bookmarkName && !EMPTY_STRING.equalsIgnoreCase(bookmarkName)){
BookmarkMetaDataBO bkmrkBo = new BookmarkMetaDataBO();
**bkmrkBo.setTop(left);
bkmrkBo.setLeft(top);**
bookmarkMap.put(pageNumber-1,bkmrkBo);
}

getAllBookmarks(current, emptyString,bookmarkMap);
current = current.getNextSibling();
}
}

谢谢...

关于java - 无法使用 PDFBOX 获取页面中书签的具体位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com