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<>();
进入循环。
我正在使用 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<>();
进入循环。