Member 12676479 Ответов: 1

Как читать пользовательские свойства pdf


Привет,
У меня есть требование прочитать пользовательские свойства PDF-файла с помощью itextSharp. Я могу прочитать следующие свойства:-
Автор, название, создатель, дата создания и т. д., Но не в состоянии прочитать пользовательские свойства вкладки.

Что я уже пробовал:

StringBuilder text = new StringBuilder();
            try
            {
                using (PdfReader reader = new PdfReader(path))
                {
                    //for (int i = 1; i <= reader.NumberOfPages; i++)
                    //{
                    //    text.Append(PdfTextExtractor.GetTextFromPage(reader, i));   
                    //}

                    text.Append("<br />");
                    text.Append("Author: " + reader.Info["Author"]);
                    text.Append("<br />");
                    text.Append("Title: " + reader.Info["Title"]);
                    text.Append("<br />");
                    text.Append("Creator: " + reader.Info["Creator"]);
                    text.Append("<br />");
                    text.Append("Creation Date: " + reader.Info["CreationDate"]);
                    text.Append("<br />");
                    text.Append("Modified: " + reader.Info["ModDate"]);
                    text.Append("<br />");
                    text.Append("Producer: " + reader.Info["Producer"]);
                    text.Append("<br />");
                    text.Append("PDF Version " + reader.PdfVersion.ToString());
}

Используя приведенный выше код, я могу читать обычные свойства pdf, но не свойства из пользовательской вкладки

1 Ответов

Рейтинг:
2

NathanRO

Используйте словарь< string, string & gt; Вот так:

static string GetPropertyByName(string filePath, string propertyName)
{
   if (String.IsNullOrEmpty(filePath) || !System.IO.File.Exists(filePath) || String.IsNullOrEmpty(propertyName)) { return null; }
   Dictionary<string, string> propertyInfo = GetPdfProperties(filePath);
   foreach (KeyValuePair<string, string> property in propertyInfo)
   {
      if (property.Key == propertyName) { return property.Value; }
   }
   return null; ;
}

static Dictionary<string, string> GetPdfProperties(string filePath)
{
   Dictionary<string, string> propertyInfo = null;

   using (PdfReader reader = new PdfReader(filePath))
   {
      propertyInfo = reader.Info;
      reader.Close();
   }

   return propertyInfo;
}


Теперь просто найдите нужное вам свойство по имени (ключу), вот так:

string pdfFilePath = @"C:\....\Some File.pdf";
string propertyName = "CustomProperty1";
string propertyValue = GetPropertyByName(pdfFilePath, propertyName)
if (propertyValue == null) { Console.WriteLine("Property "+ propertyName + " was not found."); }
else { Console.WriteLine(propertyName + " = " + propertyValue); }


Примечание: приведенный выше код был протестирован.


Member 12676479

Я не могу найти свойства, определенные на вкладке custom. Можете ли вы помочь мне найти свойства pdf на вкладке CUSTOM

NathanRO

Это должно перечислить все свойства, включая также пользовательскую вкладку. Пока вы знаете имя искомого свойства, вы можете извлечь данные, проверив ключ, а затем прочитав значение (строку). Если вы не знаете имени пользовательского свойства, то можете просто перечислить их все в словаре.