pdf 中的书签不会转到正确的页面,也不会转到任何页面。为什么会这样?

Bookmarks in a pdf not going to the correct pages nor any page for that matter. Why is this happening?

我正在使用 Netbeans 和 iText pdf api。所以我有以下方法创建一个可以插入到 pdf 中的哈希表。在这种情况下,它们是要放在文档末尾的 pdf 中的图像文件。

private HashMap<String, Object> newTmp = new HashMap<>(); //to generate bookmarks from images, another object is made
private ArrayList<HashMap<String, Object>> bookmarks = new ArrayList<>(); //an array list is instantiated for bookmarks to be saved

private void bookmarkGen(String imageList[]) {
int n = 0; //counter used to progress each bookmark.
    for (int i = 0; i < imageList.length; i++) {
        if (imageList[i] != null) {
            bookmarks.add(newTmp);
            newTmp.put("Title", imageList[i].substring(imageList[i].lastIndexOf("/"), imageList[i].lastIndexOf(".")));
            newTmp.put("Action", "GoTo");
            newTmp.put("Page", String.format("%d Fit", n++));
            System.out.print(n + "\n");
            System.out.print("Bookmark Added\n");
        }
    }
}

此过程的下一部分涉及以下代码行,用于将书签输入 pdf。

    if (!bookmarks.isEmpty() && pdfcounter > 0) {
        copy.setOutlines(bookmarks);
        System.out.println("Bookmarks have been outlined");
    }

每当我执行此操作时,其中一个书签只会转到一页,而其余书签则没有分配页面。我做错了什么?

您创建 newTmp 一次并多次将其添加到您的列表中,每次都覆盖其条目。因此,您最终会得到一个列表,其中包含许多对 newTmp 的引用,其值在循环的最后一次迭代中设置。

要解决此问题,请移动

private HashMap<String, Object> newTmp = new HashMap<>(); 

进入循环。