使用iText,无法复制从InDesign / FrameMaker创建的PDF书签目标

时间:2015-10-04 14:50:38

标签: java itext adobe-indesign framemaker

我正在编写一个实用程序来将书签折叠为现有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正文中没有目的地。有什么建议吗?

0 个答案:

没有答案