function GetAnnotationDictionaryValue(AnnotIndex: Integer; const Key: WString): TPdfDictionaryValue;
| AnnotIndex | Integer. Nullbasierter Index der Anmerkung auf der aktuellen Seite, im Bereich 0 .. AnnotationCount - 1. Ein Index außerhalb des Bereichs löst einen EPdfError aus |
| Key | WString. Name des zu lesenden Wörterbucheintrags, vor dem nativen Aufruf UTF-8-kodiert |
| Result | TPdfDictionaryValue. Kind trägt den nativen Werttyp; String-, Name- und Zahlenwerte werden in StringValue / NumberValue mit HasScalarValue = True dekodiert |
Jede Anmerkung ist von einem PDF-Wörterbuch unterlegt, und das Record-Modell der Komponente bildet nur die gängigen Einträge ab. Dieser Aufruf greift in das rohe Wörterbuch und liest einen einzelnen Schlüssel, sodass anwendungsdefinierte Einträge (ein Review-Status, eine Gruppen-ID, eine Anbieter-Erweiterung) sichtbar werden, ohne den Objektgraph zu durchlaufen
Die Wertart wird nativ abgefragt und in einen TPdfDictionaryValueKind dekodiert: pdvkUnknown, pdvkBoolean, pdvkNumber, pdvkString, pdvkName, pdvkArray, pdvkDictionary, pdvkStream, pdvkNull oder pdvkReference. Nur die skalaren Arten werden geholt: Strings und Namen werden in StringValue dekodiert, Zahlen in NumberValue (vom nativen API in einfacher Genauigkeit gelesen), und HasScalarValue markiert einen erfolgreichen Abruf. Werte ohne skalare Nutzlast — Booleans, Arrays, verschachtelte Wörterbücher, Streams — werden allein über Kind gemeldet
Für Schlüssel, die das Record-Modell bereits bereitstellt, ziehen Sie Annotation vor: Es normalisiert und validiert die gängigen Felder. Greifen Sie zu diesem Aufruf nur, wenn ein Schlüssel außerhalb des Modells liegt
pdvkUnknown mit HasScalarValue = False auf; diese Kombination bedeutet „kein Wert“T (der Subtyp) und t unterschiedliche Einträge
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;