function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. Индекс на анотацията на текущата страница, започващ от нула, в диапазона 0 .. AnnotationCount - 1. Индекс извън диапазона вдига EPdfError |
| Attachment | TPdfAnnotationAttachment. При успех: Name, Description, MimeType и декодираният payload в Data (TBytes). Изчиства се до стойността си по подразбиране, преди извикването да започне |
| MaxBytes | Cardinal. Горна граница за размера на payload. Стойността по подразбиране 67108864 позволява до 64 MB; по-голям payload вдига EPdfError |
| Result | Boolean. True, когато анотацията носи прикачен файл и payload е прочетен изцяло; False, когато липсва прикачен файл или payload не може да бъде декодиран |
Анотация от тип file attachment закрепя вграден файл към точка от страница. Това извикване отваря анотацията през native интерфейса (FPDFAnnot_GetFileAttachment) и, когато анотацията носи прикачен файл, прочита описателните ѝ полета и целия декодиран payload в запис TPdfAnnotationAttachment
Извикването следва Try-модела: анотация без прикачен файл връща False, вместо да вдига изключение, а payload, който не може да бъде декодиран, също връща False. Само надвишеният размер на payload се превръща в изключение, така че лимитът 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;