function GetAnnotationDictionaryValue(AnnotIndex: Integer; const Key: WString): TPdfDictionaryValue;
| AnnotIndex | Integer. Индекс аннотации на текущей странице с отсчётом от нуля, в диапазоне 0 .. AnnotationCount - 1. Индекс вне диапазона возбуждает EPdfError |
| Key | WString. Имя читаемой записи словаря, перед вызовом нативного API кодируется в UTF-8 |
| Result | TPdfDictionaryValue. Kind несёт собственный тип значения; строки, имена и числа декодируются в StringValue / NumberValue с HasScalarValue = True |
Каждая аннотация опирается на словарь PDF, и модель записей компонента отображает только общие записи. Этот вызов обращается к исходному словарю и читает один ключ, поэтому определённые приложением записи (статус рецензирования, идентификатор группировки, расширение поставщика) становятся видимыми без обхода графа объектов
Тип значения запрашивается нативно и декодируется в TPdfDictionaryValueKind: pdvkUnknown, pdvkBoolean, pdvkNumber, pdvkString, pdvkName, pdvkArray, pdvkDictionary, pdvkStream, pdvkNull или pdvkReference. Извлекаются только скалярные типы: строки и имена декодируются в StringValue, числа — в NumberValue (нативный API читает их с одинарной точностью), а HasScalarValue отмечает успешное извлечение. Значения без скалярного содержимого — булевы, массивы, вложенные словари, потоки — сообщаются только через Kind
Для ключей, которые модель записей уже раскрывает, предпочтительнее Annotation: он нормализует и проверяет общие поля. Обращайтесь к этому вызову, только когда ключ лежит вне модели
pdvkUnknown с HasScalarValue = False; эта комбинация означает «значения нет»T (подтип) и t — разные записи
var
Value: TPdfDictionaryValue;
begin
// read a vendor-specific review status from annotation 2
Value := Pdf1.GetAnnotationDictionaryValue(2, 'ReviewStatus');
if (Value.Kind = pdvkName) and Value.HasScalarValue then
Memo1.Lines.Add('Status: ' + Value.StringValue);
end;