iText7 Чтение CreateDate - PullRequest
       19

iText7 Чтение CreateDate

1 голос
/ 15 апреля 2020

Я заменяю использование AsposePdf на iText7 . И мне нужно прочитать свойство CreateDate документа pdf с библиотекой itext7.

В настоящее время я реализовал это так:

PdfDocument doc = new PdfDocument(pdfReader);
string xmp = Encoding.UTF8.GetString(doc.GetXmpMetadata());
XElement xmpXml = XElement.Parse(xmp);

XElement dateElement = (from e in xmpXml.Descendants()
                                    where 0 == string.Compare(e.Name.LocalName, "CreateDate", true)
                                    select e).SingleOrDefault();

DateTime? createDateTime = null;
if (dateElement != null)
{
    createDateTime = DateTime.Parse(dateElement.Value);
}

Но Я не уверен, что это правильный способ чтения таких свойств, как CreateDate. Теоретически: в разных версиях PDF-документа CreateDate может быть написан в разных местах. Или XML структура XMP-части может быть изменена.

Поэтому я ожидаю, что iText7 обработает логи c извлечения свойства CreateDate.

Итак, мой вопрос:

Есть ли лучший способ сделать то, что я реализовал в разделе кода с iText7?

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2020

Есть два места, где может находиться CreateDate / CreationDate: документ информационный словарь и документ Метаданные XMP .

Теоретически они могут быть вне syn c и вам придется выбрать, какой из них отдать предпочтение, но обычно все основные производители PDF сохраняют эти даты в syn c.

Для извлечения обоих значений iText предлагает стандартные функции:

// Info dictionary
String date = pdfDocument.getDocumentInfo().getMoreInfo("CreationDate");

// XMP metadata
if (pdfDocument.getXmpMetadata() != null) {
    XMPMeta meta = XMPMetaFactory.parseFromBuffer(pdfDocument.getXmpMetadata());
    XMPDateTime dateTime = meta.getPropertyDate(XMPConst.NS_XMP, PdfConst.CreateDate);
}

Обратите внимание, что код находится в Java, но его очень легко адаптировать. NET

...