function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;
| AnnotIndex | Integer. Indeks adnotacji na bieżącej stronie liczony od zera, w zakresie 0 .. AnnotationCount - 1. Indeks poza zakresem zgłasza EPdfError |
| Attachment | TPdfAnnotationAttachment. Po sukcesie: Name, Description, MimeType i zdekodowane dane w Data (TBytes). Przed wykonaniem wywołania czyszczony do wartości domyślnych |
| MaxBytes | Cardinal. Górna granica rozmiaru danych. Domyślne 67108864 pozwala na do 64 MB; większe dane zgłaszają EPdfError |
| Result | Boolean. True, gdy adnotacja niesie załącznik plikowy i dane zostały odczytane w całości; False, gdy załącznika nie ma albo nie udało się zdekodować danych |
Adnotacja załącznika plikowego przypina plik osadzony do punktu na stronie. To wywołanie otwiera adnotację przez natywny interfejs (FPDFAnnot_GetFileAttachment) i, gdy adnotacja niesie załącznik, czyta jego pola opisowe oraz pełne zdekodowane dane do rekordu TPdfAnnotationAttachment
To wywołanie we wzorcu Try: adnotacja bez załącznika zwraca False zamiast zgłaszać wyjątek, a danych, których nie da się zdekodować, również skutkują False. Tylko zbyt duże dane zamieniają się w wyjątek, więc limit MaxBytes może działać jako twarda ochrona przed wyczerpaniem pamięci przez wrogie dokumenty
Załączniki adnotacji są niezależne od drzewa EmbeddedFiles poziomu dokumentu ujawnianego przez Attachment: załącznik może siedzieć na adnotacji strony, nie pojawiając się w tym drzewie, i odwrotnie. Użyj AddAnnotationFileAttachment, aby jednym wywołaniem dołączyć dane do istniejącej adnotacji
MaxBytes na wartość odpowiednią dla aplikacji
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;