PDFium Delphi Component Docs

Метод TryGetAnnotationFileAttachment

Компонент: TPdf  ·  Модул: PDFium
Прочита вградения файл, носен от анотация за прикачен файл на текущата страница, и връща името му, описанието, MIME подтипа и декодираните байтове на съдържанието

Синтаксис

function TryGetAnnotationFileAttachment(AnnotIndex: Integer; out Attachment: TPdfAnnotationAttachment; MaxBytes: Cardinal = 67108864): Boolean;

AnnotIndexInteger. Индекс на анотацията на текущата страница, започващ от нула, в диапазона 0 .. AnnotationCount - 1. Индекс извън диапазона вдига EPdfError
AttachmentTPdfAnnotationAttachment. При успех: Name, Description, MimeType и декодираният payload в Data (TBytes). Изчиства се до стойността си по подразбиране, преди извикването да започне
MaxBytesCardinal. Горна граница за размера на payload. Стойността по подразбиране 67108864 позволява до 64 MB; по-голям payload вдига EPdfError
ResultBoolean. True, когато анотацията носи прикачен файл и payload е прочетен изцяло; False, когато липсва прикачен файл или payload не може да бъде декодиран

Описание

Анотация от тип file attachment закрепя вграден файл към точка от страница. Това извикване отваря анотацията през native интерфейса (FPDFAnnot_GetFileAttachment) и, когато анотацията носи прикачен файл, прочита описателните ѝ полета и целия декодиран payload в запис TPdfAnnotationAttachment

Извикването следва Try-модела: анотация без прикачен файл връща False, вместо да вдига изключение, а payload, който не може да бъде декодиран, също връща False. Само надвишеният размер на payload се превръща в изключение, така че лимитът MaxBytes може да служи като твърда защита срещу изчерпване на паметта от враждебни документи

Прикачените файлове към анотации са отделни от дървото EmbeddedFiles на ниво документ, изложено чрез Attachment: прикачен файл може да стои върху анотация на страница, без да се появява в това дърво, и обратно. Използвайте AddAnnotationFileAttachment, за да прикачите данни към съществуваща анотация с едно извикване

Забележки

Пример

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;

Виж също

AddAnnotationFileAttachment, Annotation, AnnotationCount, Attachment