我正在处理包含多个文档的单个 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"));
}
您没有考虑到书签存储在具有分支和叶子的树结构中(在 PDF 规范中,它称为大纲树).
正如 @Todoy 在评论部分所说,你的代码适用于顶层,但如果你想看到all标题,您需要使用递归方法来查看"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));
}
}
}
The showTitle()
方法是递归的。如果检查的书签条目有子项,它会调用自己。通过此代码片段,您可以遍历大纲树的所有分支和叶子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)