我正在使用包含多个文档的单个PDF。每个文档都有一个书签。我需要阅读我正在构建的对帐应用程序的书签名称。以下代码对我不起作用。我正在尝试将书签名称放在 title 字符串中。有人可以提供任何指导吗?非常感谢你。
PdfReader reader = new PdfReader("C:\\Work\\Input.pdf");
List<HashMap<String,Object>> bookmarks = SimpleBookmark.getBookmark(reader);
for(int i = 0; i < bookmarks.size(); i++){
HashMap<String, Object> bm = bookmarks.get(i);
String title = ((String)bm.get("Title"));
}
答案 0 :(得分:2)
您没有考虑书签存储在带有分支和叶子的树结构中(在PDF规范中,它被称为大纲树)。
正如@Todoy在评论部分所说,你的代码适用于顶层,但如果你想看所有标题,你需要使用一个递归方法来查看"Kids"
。
public void inspectPdf(String filename) throws IOException, DocumentException {
PdfReader reader = new PdfReader(filename);
List<HashMap<String,Object>> bookmarks = SimpleBookmark.getBookmark(reader);
for (int i = 0; i < bookmarks.size(); i++){
showTitle(bookmarks.get(i));
}
reader.close();
}
public void showTitle(HashMap<String, Object> bm) {
System.out.println((String)bm.get("Title"));
List<HashMap<String,Object>> kids = (List<HashMap<String,Object>>)bm.get("Kids");
if (kids != null) {
for (int i = 0; i < kids.size(); i++) {
showTitle(kids.get(i));
}
}
}
showTitle()
方法是递归的。如果检查的书签条目有孩子,它会调用自己。使用此代码段,您可以遍历大纲树的所有分支和叶子。