在PDF文件中检索嵌套的bookmars

时间:2017-02-27 15:28:25

标签: c# pdf dictionary collections itext

我正在编写一个程序,使用iTextSharp 5.5.10在pdf文件中检索嵌套书签的标题。

我编写了一个循环函数,它将Dictionary<string, object>对象作为输入参数并返回List<string>个对象,但不起作用。

public static List<string> bookmarksList(Dictionary<string, object> parent)
{
    List<string> PDFbookmarks = new List<string>();

    if (parent.ContainsKey("Kids"))
    {
        PDFbookmarks.Add(parent["Kids"].ToString());
        Dictionary<string, object> child = parent["Kids"] as Dictionary<string, object>;
        bookmarksList(child);
    }

    return PDFbookmarks;
}

我从Dictionary<string, object>方法获得的GetBookmark(PDFReader)对象。

撇开ToString()方法显然没有给我实际孩子的头衔的事实,问题是我在第一次定期电话时得到NullReferenceException:当我试图让孩子感染时函数中的变量,它得到一个null指针。

Kids键的关联值是IList<Dictionary<string, object>>对象本身,如调试窗口所示:

System.Collections.Generic.List'1[System.Collections.Generic.Dictionary'2[System.String,System.Object]]] (虽然这应该是List对象,而不是IList,我错了吗?)

所以我不明白为什么我得到一个null指针而不是......

任何提示?

谢谢, 的Davide。

1 个答案:

答案 0 :(得分:0)

我认为向下转换会有效,但事实并非如此。改变变量声明是我的一天。我还重写了整个功能,现在它完全按预期工作。

public static List<string> BookmarksList(Dictionary<string, object> parent, List<string> bookmarkList)
{
    if (parent.ContainsKey("Kids"))
    {
        IList<Dictionary<string,object>> child = parent["Kids"] as IList<Dictionary<string, object>>;

        foreach(Dictionary<string, object> tmpChild in child)
        {
            bookmarkList.Add(tmpChild["Title"].ToString());
            MyClass.BookmarksList(tmpChild, bookmarkList);
        }
    }
    return bookmarkList;
}