function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. Index anotácie na aktuálnej strane založený na nule, v rozsahu 0 .. AnnotationCount - 1. Index mimo rozsahu vyvolá EPdfError |
| Attachment | TPdfAnnotationAttachment. Pri úspechu: Name, Description, MimeType a dekódovaný obsah v Data (TBytes). Pred spustením volania sa vymaže na predvolenú hodnotu |
| MaxBytes | Cardinal. Horná hranica veľkosti obsahu. Predvolených 67108864 povoľuje až 64 MB; väčší obsah vyvolá EPdfError |
| Result | Boolean. True, keď anotácia nesie prílohu súboru a obsah bol prečítaný úplne; False, keď ju nemá alebo obsah nebolo možné dekódovať |
Anotácia prílohy súboru pripína vložený súbor k bodu na strane. Toto volanie otvorí anotáciu cez natívne rozhranie (FPDFAnnot_GetFileAttachment) a keď anotácia nesie prílohu, prečíta jej popisné polia a celý dekódovaný obsah do záznamu TPdfAnnotationAttachment
Výsledok je volanie v štýle Try: anotácia bez prílohy vráti False namiesto vyvolania výnimky a obsah, ktorý sa nepodarí dekódovať, tiež vráti False. Iba prekročená veľkosť obsahu sa mení na výnimku, takže limit MaxBytes môže slúžiť ako tvrdá ochrana proti vyčerpaniu pamäte zo strany nepriateľských dokumentov
Prílohy anotácií sú oddelené od stromu EmbeddedFiles na úrovni dokumentu vystaveného vlastnosťou Attachment: príloha môže sedieť na anotácii strany bez toho, aby sa objavila v tomto strome, a naopak. Na pripojenie údajov k existujúcej anotácii jedným volaním použite AddAnnotationFileAttachment
MaxBytes na hodnotu vhodnú pre aplikáciu
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;