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