2016-05-25 2 views
0

У меня возникли трудности с чтением определенного пользовательского свойства из раздела XMP файла PDF с использованием itextsharp v. 5.5.9.Чтение значения настраиваемого свойства из XMP с помощью itextsharp 5.5.9

Когда я пытаюсь использовать класс XmpReader, он становится помеченным как устаревший, и он не содержит никакого общедоступного метода, который кажется полезным для чтения.

Я могу преобразовать раздел метаданных в XML, а затем разобрать его каким-то образом (обходной путь состоит в использовании библиотеки XmpCore, которая имеет удобные методы для чтения свойств по имени), но я уверен, что что-то не хватает. ..

Я думаю, что должно быть возможно просто получить доступ к некоторым свойствам только с одной библиотекой.

PdfReader reader = new PdfReader(inFile); 
PdfStamper stamper = new PdfStamper(reader, new FileStream(outFile, FileMode.Create)); 
MemoryStream ms = null; 

if (reader.Metadata != null) 
    ms = new MemoryStream(reader.Metadata); 
else 
{ 
    stamper.CreateXmpMetadata(); 
    ms = new MemoryStream(); 
} 

XmpWriter xw = new XmpWriter(ms); 

xw.XmpMeta.GetPropertyString(XmpConst.NS_DC, "MyProperty"); // -> not found, but it's ok for the first time... 
xw.SetProperty(XmpConst.NS_DC, "MyProperty", "MyValue"); // -> OK 
xw.XmpMeta.GetPropertyString(XmpConst.NS_DC, "MyProperty"); // -> OK 

xw.Close(); 
stamper.XmpMetadata = ms.ToArray(); 
stamper.Close(); 
reader.Close(); 

Если я запустить программу на тот же файл дважды (так свойство сохраняется в файле) свойство еще не найден ..

Как я могу читать наличие и значение MyProperty?

ответ

0

Я закончил с этим решением.

Это требует библиотеки XmpCore, но это легко и быстро осуществить, избегая явное управление многих деталей, такие как кодировки:

string result = null; 
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(inFile); 
if (reader.Metadata != null) 
{ 
    XmpCore.IXmpMeta meta = XmpCore.XmpMetaFactory.ParseFromBuffer(reader.Metadata); 
    result = meta.GetPropertyString(XmpConst.NS_DC, "MyProperty"); 
} 
reader.Close(); 
return result; 
0

Если я не ошибаюсь, вы хотите получить настроенное свойство метаданных файла pdf. Если да, то вы можете сделать так:

PdfReader reader = new PdfReader(inFile); 
string myProperty = reader.Info.Where(x => x.Key == "MyProperty").Select(x => x.Value).FirstOrDefault(); 
+0

Настроенного свойство не находится в 'секции reader.Info', но в разделе метаданных XMP, 'reader.Metadata', который является' byte [] '. Как я уже сказал, я могу преобразовать этот массив в строку XML, а затем проанализировать его или использовать другую библиотеку XMP для простого чтения этого свойства. – BeerBaron

Смежные вопросы