function InspectPdfAMetadata: TPdfAMetadataReport;
| Result | TPdfAMetadataReport с доступностью XMP, текстом ошибки разбора, полями несоответствий и восемью построчными сравнениями полей |
Метод читает Title, Author, Subject, Keywords, Creator, Producer, CreationDate и ModDate через PDFium, так что строки PDFDocEncoding и UTF-16 используют то же декодирование Unicode, что и живой документ
Осмотр исходного словаря фиксирует, существует ли каждый ключ Info независимо от своего значения, поэтому явно пустая строка не считается отсутствующим ключом
Title и Subject требуют значения rdf:Alt с тегом x-default; Author требует rdf:Seq ровно с одним значением; остальные отображения требуют простого свойства, находимого по URI пространства имён и локальному имени
Текстовые значения сравниваются по точным кодовым точкам Unicode; даты сравниваются как локальные компоненты, когда ни одно значение не имеет часового пояса, или как моменты UTC, когда часовые пояса есть у обоих значений
TPdfAMetadataState различает состояния: не требуется, эквивалентно, XMP отсутствует, неверный тип RDF, несовпадение значений, неверная дата Info и неверная дата XMP
Метод работает только на чтение, требует активного документа и не изменяет состояние PDFium или исходного документа
var Report: TPdfAMetadataReport;
Report := Pdf1.InspectPdfAMetadata;
if Report.HasXmpPacket and not Report.IsEquivalent then
ShowMessage(IntToStr(Length(Report.Comparisons)) + ' fields inspected');