PdfSharp,更新C#错误中的元数据

时间:2016-03-28 09:47:44

标签: c# metadata pdfsharp

我正在使用PdfSharp参考库尝试向我的程序添加添加元数据标签的功能。我能够成功地将元数据标签添加到文档中,但是我在更新现有自定义属性上的标签时遇到了问题。每当我尝试使用我的方法更新自定义属性时,我都会收到以下异常:

  

“'System.Collections.Generic.KeyValuePair'不包含'Name'的定义。”

你能告诉我,如果我在下面的foreach循环中编写if语句,以正确循环遍历PDF文档中的所有自定义元素,看它是否存在并需要更新?感谢。

public void AddMetaDataPDF(string property, string propertyValue, string    
                                                                   path)
{
    PdfDocument document = PdfReader.Open(path);
    bool propertyFound = false;

    try {
           dynamic properties = document.Info.Elements;
           foreach(dynamic p in properties)
           {
               //Check to see if the property exists. If it does, update   
                   value.
               if(string.Equals(p.Name, property,  
                StringComparison.InvariantCultureIgnoreCase))
               {
                   document.Info.Elements.SetValue("/" + property, new   
                           PdfString(propertyValue));
               }
           }
           // the property doesn't exist so add it
           if(!propertyFound)
           {
               document.Info.Elements.Add(new KeyValuePair<String, PdfItem>   
                   ("/"+ property, new PdfString(propertyValue)));
           }
      }

      catch (Exception ex)
      {
          MessageBox.Show(path + "\n" + ex.Message);
          document.Close();

      }
      finally
      {
          if(document != null)
          {
              document.Save(path);
              document.Close();
          }
      }
}

1 个答案:

答案 0 :(得分:1)

我没有尝试过您的代码,但使用此库时常见的问题是您需要在属性名称前添加斜杠才能找到它。下面的代码将成为诀窍。

PdfDocument document = PdfReader.Open(path);
var properties = document.Info.Elements;
if (properties.ContainsKey("/" + propertyName))
{
    properties.SetValue("/" + propertyName, new PdfString(propertyValue));
}
else
{
    properties.Add(new KeyValuePair<String, PdfItem>("/" + propertyName, new PdfString(propertyValue)));
}
document.Save(path);
document.Close();

PDF文件也不应该被写保护。否则,在调用PdfSharp之前,您需要使用工具来解锁文件。