打开PDF存在书签而不是目的地 - C#

时间:2014-06-22 13:23:02

标签: c# pdf itextsharp word-2007

这是否可以打开具有特定存在书签的PDF文件,以编程方式在C#上打开(如果有办法,我可以使用ItextSharp吗?)

我关注了this问题,这对目的地而言并非适用于书签。

另一个可能对我有用的选择是使用Word 2007配置目标,因此在使用Acrobat Reader转换为PDF后,目标及其名称将保存。

感谢您的帮助!

编辑1

这是我的代码:(点击按钮1将所有书签写入组合框)

private void button1_Click(object sender, EventArgs e)
    {
        reader = new PdfReader("C:\\Users\\itay\\Desktop\\V-Sperm Gold 3.49 User Guide_04_APR_11.pdf");
        book_mark = SimpleBookmark.GetBookmark(reader);
        foreach (Dictionary<string, object> bk in book_mark)
        {
            foreach (KeyValuePair<string, object> kvr in bk)
            {
                if (kvr.Key == "Kids" || kvr.Key == "kids")
                {
                    IList<Dictionary<string, object>> child =
                            (IList<Dictionary<string, object>>)kvr.Value;

                    recursive_search(child, tn);

                }

                else if (kvr.Key == "Title" || kvr.Key == "title")
                {
                    tn = new System.Windows.Forms.TreeNode(kvr.Value.ToString());
                    //comboBox1.Items.Add(tn.Text);
                }
                else if (kvr.Key == "Page" || kvr.Key == "page")
                {
                    //saves page number
                    tn.ToolTipText = Regex.Match(kvr.Value.ToString(), "[0-9]+").Value;
                }
            }
        }

    }

    public void recursive_search(IList<Dictionary<string, object>> ilist, TreeNode tnt)
    {
        foreach (Dictionary<string, object> bk in ilist)
        {
            foreach (KeyValuePair<string, object> kvr in bk)
            {
                if (kvr.Key == "Kids" || kvr.Key == "kids")
                {
                    IList<Dictionary<string, object>> child =
                                (IList<Dictionary<string, object>>)kvr.Value;
                    recursive_search(child, tn);

                }
                else if (kvr.Key == "Title" || kvr.Key == "title")
                {
                    tn = new System.Windows.Forms.TreeNode(kvr.Value.ToString());
                    comboBox1.Items.Add(tn.Text);
                }
                else if (kvr.Key == "Page" || kvr.Key == "page")
                {
                    tn.ToolTipText = Regex.Match(kvr.Value.ToString(), "[0-9]+").Value;
                    tnt.Nodes.Add(tn);

                }
            }
        }
    }

点击按钮2打开PDF:

    private void button2_Click(object sender, EventArgs e)
    {
        Process myProcess = new Process();
        myProcess.StartInfo.FileName = "AcroRd32.exe";
        myProcess.StartInfo.Arguments = "pagemode=bookmarks&nameddest=" + comboBox1.Text + "\" \"" + "C:\\Users\\itay\\Desktop\\V-Sperm Gold 3.49 User Guide_04_APR_11.pdf" + "\"";
        myProcess.Start();
    }

1 个答案:

答案 0 :(得分:1)

您似乎正在寻找特定的打开参数但您找不到它,因为您正在寻找不存在的东西。

请参阅Adobe网站上提供的官方文档:http://partners.adobe.com/public/developer/en/acrobat/PDFOpenParameters.pdf

无法定义可触发的书签。你会发现诸如nameddest(你已经知道)和page这样的开放参数可以跳转到PDF中的特定位置,但是如果要跳转到特定书签,则需要检查书签(例如使用SimpleBookmark类。如果您看到书签指向某个页面,则需要使用page参数,并且可以将其与zoom,{ {1}}或view参数,具体取决于为该页面定义的目标。