function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. اندیس صفر-مبنای حاشیهنویسی روی صفحهٔ فعلی، در بازهٔ 0 .. AnnotationCount - 1. اندیس بیرون از بازه EPdfError برمیانگیزد |
| Attachment | TPdfAnnotationAttachment. در صورت موفقیت: Name، Description، MimeType و بار رمزگشاییشده در Data (TBytes). پیش از اجرای فراخوان به پیشفرضش خالی میشود |
| MaxBytes | Cardinal. کران بالای اندازهٔ بار. پیشفرض 67108864 تا ۶۴ MB اجازه میدهد؛ باری بزرگتر EPdfError برمیانگیزد |
| Result | Boolean. True وقتی حاشیهنویسی پیوست فایلی داشته باشد و بار کامل خوانده شده باشد؛ False وقتی پیوستی ندارد یا بار رمزگشایی نشد |
یک حاشیهنویسی پیوست-فایلی فایل تعبیهشدهای را به نقطهای از صفحه سنجاق میکند. این فراخوان حاشیهنویسی را از طریق رابط نیتیو (FPDFAnnot_GetFileAttachment) باز میکند و وقتی حاشیهنویسی پیوستی داشته باشد، فیلدهای توصیفی و کل بار رمزگشاییشده را در یک رکورد TPdfAnnotationAttachment میخواند
نتیجه یک فراخوان با الگوی Try است: حاشیهنویسی بدون پیوست بهجای برپاکردن استثنا False برمیگرداند، و باری که رمزگشایی نشود هم False میدهد. فقط باری با اندازهٔ بیش از حد به استثنا بدل میشود، بنابراین کران MaxBytes میتواند بهعنوان نگهبان سخت در برابر اتمام حافظه از سندهای خصمانه عمل کند
پیوستهای حاشیهنویسی از درخت EmbeddedFiles سطح سند که Attachment افشا میکند جداست: یک پیوست میتواند روی حاشیهنویسی صفحهای بنشیند بدون آنکه در آن درخت دیده شود و برعکس. برای الصاق داده به یک حاشیهنویسی موجود در یک فراخوان از AddAnnotationFileAttachment استفاده کنید
MaxBytes را روی مقداری مناسب برای برنامه بگذارید
var
I: Integer;
Attachment: TPdfAnnotationAttachment;
begin
for I := 0 to Pdf1.AnnotationCount - 1 do
if (Pdf1.Annotation[I].Subtype = anFileAttachment) and
Pdf1.TryGetAnnotationFileAttachment(I, Attachment) then
begin
TFile.WriteAllBytes('extracted\' + Attachment.Name, Attachment.Data);
Memo1.Lines.Add(Format('%s (%s, %d bytes)',
[Attachment.Name, Attachment.MimeType, Length(Attachment.Data)]));
end;
end;