function GetAnnotationDictionaryValue(AnnotIndex: Integer; const Key: WString): TPdfDictionaryValue;
| AnnotIndex | Integer. 현재 페이지 주석의 0 기반 인덱스로, 0 .. AnnotationCount - 1 범위입니다. 범위를 벗어난 인덱스는 EPdfError를 일으킵니다 |
| Key | WString. 읽을 딕셔너리 항목의 이름이며, 네이티브 호출 전에 UTF-8로 인코딩됩니다 |
| Result | TPdfDictionaryValue. Kind가 네이티브 값 유형을 담고, 문자열·이름·숫자 값은 HasScalarValue = True와 함께 StringValue / NumberValue로 디코딩됩니다 |
모든 주석은 PDF 딕셔너리에 기반을 두며, 컴포넌트의 레코드 모델은 공통 항목만 매핑합니다. 이 호출은 원본 딕셔너리로 들어가 키 하나를 읽으므로, 애플리케이션이 정의한 항목(검토 상태, 그룹화 id, 벤더 확장)을 객체 그래프를 훑지 않고도 볼 수 있습니다
값 유형은 네이티브로 조회되어 TPdfDictionaryValueKind로 디코딩됩니다: pdvkUnknown, pdvkBoolean, pdvkNumber, pdvkString, pdvkName, pdvkArray, pdvkDictionary, pdvkStream, pdvkNull, pdvkReference. 스칼라 유형만 가져옵니다. 문자열과 이름은 StringValue로, 숫자는 NumberValue로(네이티브 API가 단정밀도로 읽음) 디코딩되며, HasScalarValue가 성공적인 가져오기를 표시합니다. 스칼라 페이로드가 없는 값(불리언, 배열, 중첩 딕셔너리, 스트림)은 Kind만으로 보고됩니다
레코드 모델이 이미 노출하는 키는 Annotation을 쓰는 편이 좋습니다. 공통 필드를 정규화하고 검증해 주기 때문입니다. 이 호출은 모델 밖에 있는 키에만 사용하세요
HasScalarValue = False인 pdvkUnknown으로 해석됩니다. 이 조합은 “값 없음”을 뜻합니다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;