提取 PDF 书签并将其与参数 C# 进行比较

本文关键字:参数 比较 PDF 书签 提取 | 更新日期: 2023-09-27 17:56:09

我有一个关于PDF书签的问题。我正在从文件导入参数列表,并希望将它们与提取的书签进行比较。我在循环浏览导入的参数列表和提取的书签时遇到问题。有人可以看看这段代码并帮我一点忙吗?谢谢!

 public static void CompareBookmarks(string MyPDf, List<string> MyTitles)
        {
          PdfReader reader = new PdfReader(MyPdf);
          IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(reader);
          foreach (Dictionary<string, object> itemBookmark in bookmarks)
           {
             foreach (KeyValuePair<string, object> item in itemBookmark)
             {
               foreach (var title in MyTitles)
               {
                     if (item.Value == str.ToString())
                     {
                        Console.WriteLine("Found");
                     }

                     else
                     {
                         Console.WriteLine("Not found");
                     }
                 }
             }
         }

问题是,正如我现在所看到的,书签中的每个项目都有 3 个键/对值(标题、页码)。所以问题是 - 我如何仅将第一个值 - 标题与我的字符串进行比较?

提取 PDF 书签并将其与参数 C# 进行比较

我认为没有理由枚举书签中的所有项目,因为您只对标题感兴趣。所以如果没有测试,我会期待这样的事情:

foreach (Dictionary<string, object> bookmark in bookmarks)
{
  foreach (var title in MyTitles)
  {
    if (bookmark["Title"].ToString() == title)
    {
      // found
    }
  }
}
    public static void CompareBookmarks(string MyPDf, List<string> MyTitles)
    {
      PdfReader reader = new PdfReader(MyPdf);
      IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(reader);
      foreach (Dictionary<string, object> itemBookmark in bookmarks)
       {
        KeyValuePair<string, object> firstPairOfDictionary = item.FirstOrDefault();
               foreach (var title in myTitles)
               {
                  if (firstPairOfDictionary.Value != title.ToString())
                   {
                       Console.WriteLine("Did not found");
                       continue;
                   }
                   break;
               }
     }

解决方案是获取KeyValuePair中的第一个对象。我犯了一个错误,并遍历了每个书签中的所有对象。