我正在编写一个实用程序来折叠现有 PDF 的书签,并将文件另存为新的 PDF。该平台是使用 iText API 的 Java。
以下代码检索现有书签并递归调用方法来关闭它们。
/* Retrieve the bookmarks: */
List<HashMap<String, Object>> bookmarks = SimpleBookmark.getBookmark(originalPdf);
/* Now we recursively close all the bookmarks.*/
if (bookmarks != null ) {
for (HashMap temp : bookmarks) {
closeBookmark(originalPdf, temp, "false");
}
}
private static void closeBookmark(PdfReader originalPdf, HashMap localBookmark, String bookmarkState) {
localBookmark.put("Open", bookmarkState);
/* If the current bookmark has kids (lower-level bookmarks), then recursively close them as well. */
if (localBookmark.containsKey("Kids")) {
ArrayList<HashMap> kidMap = (ArrayList) localBookmark.get("Kids");
for (HashMap temp : kidMap) {
closeBookmark(originalPdf, temp, bookmarkState);
}
}
}
这适用于由 Word、OpenOffice 和 XSL-FO 创建的 PDF,但不适用于 FrameMaker 或 InDesign。在后一种情况下,我得到折叠的书签,但单击书签不会将 PDF 滚动到目标位置。似乎目的地既不存在于书签中,也不存在于 PDF 正文中。有什么建议么?