function GetAnnotationDictionaryValue(AnnotIndex: Integer; const Key: WString): TPdfDictionaryValue;
| AnnotIndex | Integer. اندیس مبتنی بر صفر حاشیهنویسی در صفحهٔ فعلی، در بازهٔ 0 .. AnnotationCount - 1. اندیس بیرون از بازه EPdfError برپا میکند |
| Key | WString. نام مدخل دیکشنری برای خواندن؛ پیش از فراخوانی نیتیو با UTF-8 کدگذاری میشود |
| Result | TPdfDictionaryValue. Kind نوع نیتیو مقدار را حمل میکند؛ مقادیر رشته، name و عدد در StringValue / NumberValue با HasScalarValue = True رمزگشایی میشوند |
هر حاشیهنویسی با یک دیکشنری PDF پشتیبانی میشود و مدل رکورد کامپوننت فقط مدخلهای رایج را نگاشت میکند. این فراخوانی به دیکشنری خام میرسد و یک کلید واحد را میخواند، در نتیجه مدخلهای تعریفشده توسط برنامه (وضعیت بازبینی، شناسهٔ گروهبندی، افزونهٔ فروشنده) بدون پیمایش گراف شیء دیده میشوند
نوع مقدار بهصورت نیتیو پرسوجو و به یک TPdfDictionaryValueKind رمزگشایی میشود: pdvkUnknown، pdvkBoolean، pdvkNumber، pdvkString، pdvkName، pdvkArray، pdvkDictionary، pdvkStream، pdvkNull یا pdvkReference. فقط انواع اسکالر واکشی میشوند: رشتهها و nameها به StringValue، اعداد به NumberValue رمزگشایی میشوند (خواندهشده با دقت single توسط 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;