【问题标题】:Get bookmark coordinates in PDF获取 PDF 中的书签坐标
【发布时间】:2015-06-23 10:39:46
【问题描述】:

我正在将签名图像放到 PDF 的确切位置。在 PDF 中,我添加了报告工具书签,这样我就可以知道在哪里放置签名图像。问题是我不知道如何获取书签坐标。用ITextsharp可以吗?

----->编辑 书签图片

----->编辑

解决办法是:

        PdfReader pdfReader = new PdfReader(GlobalVars.PdfFile);
        IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(pdfReader);
        string BookmarkID = "";
        for (int j = 0; j < bookmarks.Count; j++)
        {
            //MessageBox.Show(bookmarks[i].Values.ToArray().GetValue(0).ToString());
            string s = bookmarks[j].Values.ToArray().GetValue(0).ToString();
            if (bookmarks[j].Values.ToArray().GetValue(0).ToString() == "##PODPIS##")
            {
                BookmarkID = bookmarks[j].Values.ToArray().GetValue(1).ToString();
            }


        }

        var map = SimpleNamedDestination.GetNamedDestination(pdfReader, true);
        foreach (KeyValuePair<string, string> entry in map)
        {
            if (entry.Key.ToString() == BookmarkID)
            {
                string[] LocationArray = entry.Value.Split(null);
                GlobalVars.SignatuePageNumber = Convert.ToInt32(LocationArray[0]);
                GlobalVars.SignatureX = float.Parse(LocationArray[2], CultureInfo.InvariantCulture.NumberFormat);
                GlobalVars.SignatureY = float.Parse(LocationArray[3], CultureInfo.InvariantCulture.NumberFormat);
            }
        }

【问题讨论】:

  • 定义“书签”。您是在谈论正式命名的“大纲”还是在谈论“命名目的地”?如果您在谈论“大纲”,那么您所谓的“书签”可以实现为明确的目的地(这将解决您的问题),作为命名的目的地,但也可以作为另一个动作,例如JavaScript(这会使您的问题难以回答)。简而言之:您的问题不完整。如果您不与我们共享 PDF,我们将无法帮助您,因为“书签”在 PDF 的上下文中可能意味着不同的东西。请更准确。
  • 不知道是大纲还是命名为destination。我在帖子中添加了图片,也许您可​​以弄清楚。
  • 根据图片,我们现在知道是轮廓了,但是还不知道是哪一种轮廓。请分享 PDF,以便我们进行调查。或者打开iText RUPS 中的PDF,向我们展示大纲是如何组成的。或者你为什么不阅读documentation,在那里你会找到诸如stackoverflow.com/questions/27739820/…之类的答案
  • 我找到了坐标。还是谢谢你。
  • 阅读书签,当你点击一个书签时发生的动作并不总是一个简单的目标。当您创建书签以供以后使用时,您没问题,但是对于一般情况没有足够的保护,您正在创建未来的问题。一个书签可以有一个完整的动作树,当它被点击时会连续发生。

标签: c# itextsharp


【解决方案1】:

解决办法是:

        PdfReader pdfReader = new PdfReader(GlobalVars.PdfFile);
        IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(pdfReader);
        string BookmarkID = "";
        for (int j = 0; j < bookmarks.Count; j++)
        {
            //MessageBox.Show(bookmarks[i].Values.ToArray().GetValue(0).ToString());
            string s = bookmarks[j].Values.ToArray().GetValue(0).ToString();
            if (bookmarks[j].Values.ToArray().GetValue(0).ToString() == "##PODPIS##")
            {
                BookmarkID = bookmarks[j].Values.ToArray().GetValue(1).ToString();
            }


        }

        var map = SimpleNamedDestination.GetNamedDestination(pdfReader, true);
        foreach (KeyValuePair<string, string> entry in map)
        {
            if (entry.Key.ToString() == BookmarkID)
            {
                string[] LocationArray = entry.Value.Split(null);
                GlobalVars.SignatuePageNumber = Convert.ToInt32(LocationArray[0]);
                GlobalVars.SignatureX = float.Parse(LocationArray[2], CultureInfo.InvariantCulture.NumberFormat);
                GlobalVars.SignatureY = float.Parse(LocationArray[3], CultureInfo.InvariantCulture.NumberFormat);
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2010-10-02
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多