0

我正在编写一个实用程序来折叠现有 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 正文中。有什么建议么?

4

0 回答 0