function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. Indeks anotasi berbasis nol pada halaman saat ini, dalam rentang 0 .. AnnotationCount - 1. Indeks di luar rentang memunculkan EPdfError |
| Attachment | TPdfAnnotationAttachment. Saat berhasil: Name, Description, MimeType, dan payload hasil dekode di Data (TBytes). Dikosongkan ke nilai default sebelum panggilan berjalan |
| MaxBytes | Cardinal. Batas atas ukuran payload. Nilai default 67108864 mengizinkan hingga 64 MB; payload yang lebih besar memunculkan EPdfError |
| Result | Boolean. True ketika anotasi membawa file attachment dan payload terbaca lengkap; False ketika anotasi tidak memilikinya atau payload tidak berhasil didekode |
Anotasi file-attachment menempelkan file tersemat ke satu titik pada halaman. Panggilan ini membuka anotasi melalui antarmuka native (FPDFAnnot_GetFileAttachment) dan, ketika anotasi membawa attachment, membaca field deskriptifnya beserta payload hasil dekode lengkap ke dalam record TPdfAnnotationAttachment
Hasilnya adalah panggilan berpola Try: anotasi tanpa attachment mengembalikan False alih-alih memunculkan exception, dan payload yang gagal didekode juga mengembalikan False. Hanya payload berukuran berlebih yang berubah menjadi exception, sehingga batas MaxBytes dapat berfungsi sebagai penjaga keras terhadap kehabisan memori akibat dokumen yang berbahaya
Attachment anotasi terpisah dari pohon EmbeddedFiles tingkat dokumen yang diekspos oleh Attachment: sebuah attachment bisa berada pada anotasi halaman tanpa muncul di pohon itu, dan sebaliknya. Gunakan AddAnnotationFileAttachment untuk melampirkan data ke anotasi yang ada dalam satu panggilan
MaxBytes pada nilai yang sesuai untuk aplikasi sebelum memanggil pada dokumen yang tidak tepercaya
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;