有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:使用itext读取PDF书签名称

我正在使用包含多个文档的单个PDF。每个文档都有一个书签。我需要读取我正在构建的对账应用程序的书签名称。下面的代码不适用于我。我正在尝试将书签名称放入标题字符串中。有人能提供指导吗?多谢各位

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"));

}

共 (1) 个答案

  1. # 1 楼答案

    您没有考虑书签存储在带有分支和叶子的树结构中(在PDF规范中,它被称为大纲树

    正如@Todoy在comment部分中所说的,您的代码适用于顶层,但是如果您想查看所有标题,则需要使用递归方法,该方法还可以查看"Kids"

    看看this code sample

    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()方法是递归的。如果已检查的书签条目有子项,则它会调用自身。使用此代码段,您可以遍历大纲树的所有分支和叶子