PDFium Delphi Component Docs

ExtractAttachmentsToStreams metoda

Komponenta: TPdf  ·  Jednotka: PDFium
Dekóduje každou vestavěnou přílohu na úrovni dokumentu a zapisuje bajty obsahu do streamů dodaných volajícím pod explicitní kontrolou velikosti, chunkingu, zrušení a hlášení chyb

Syntaxe

function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;

DestinationsOpen array of TStream. Jeden stream na přílohu, v pořadí v dokumentu. Slot s nil danou přílohu přeskočí bez zápisu čehokoli. Streamy zůstávají ve vlastnictví volajícího
OptionsTPdfAttachmentBatchOptions. Limity a chování dávky: MaxAttachments, MaxFileBytes, MaxTotalBytes, ChunkBytes a StopOnError. Vycházejte z TPdfAttachmentBatchOptions.Default
ReportTPdfAttachmentBatchReport. Při návratu nese jednu položku na přílohu (Metadata, State, BytesWritten, ErrorMessage) plus souhrnné čítače (AttachmentCount, ExtractedCount, SkippedCount, FailedCount, BytesWritten, PeakBufferBytes, Cancelled, Completed)
CancellationTokenIPdfCancellationToken. Volitelný token dotazovaný před každou přílohou a mezi zápisovými chunky; nil spustí dávku bez kontrol zrušení
ResultBoolean. True jen když dávka dokončila bez zrušení a s nulovým počtem selhaných příloh; přeskočené položky se nepočítají jako selhání

Popis

Dávkový protějšek čtení Attachment po jednom indexu. Přílohy dokumentu se zachytí jednou a každý obsah se dekóduje a zatlačí do svého cílového streamu, přičemž každý výsledek se zaznamená na přílohu v Report.Items

Cílové pole musí obsahovat přesně jeden stream na přílohu v dokumentu, jinak se EPdfError vyvolá dřív, než se přečte jediný bajt. Položka nil v poli označí danou přílohu jako přeskočenou (paesSkipped) místo přerušení dávky

Možnosti se validují předem a při neplatnosti vyvolají EPdfError: MaxAttachments musí být větší než nula, MaxFileBytes a MaxTotalBytes nesmí být záporné a ChunkBytes musí být větší než nula. TPdfAttachmentBatchOptions.Default dodává 10000 příloh, limit 256 MB na soubor, souhrnný limit 1 GB, zapisovací chunky 1 MB a StopOnError = True

Každá příloha skončí v jednom ze stavů TPdfAttachmentExtractionState: paesExtracted při úspěchu, paesSkipped pro nil cíl, paesUnreadable, když obsah nelze otevřít nebo dekódovat, paesFileLimit nebo paesAggregateLimit, když se překročí limit velikosti, paesWriteFailed, když cílový stream vyvolá výjimku, a paesCancelled, když token spustí. Se zapnutým StopOnError první selhání zastaví smyčku a zbývající položky zůstanou paesNotProcessed

Funkce vrací True jen když je nastaveno Report.Completed (bez zrušení, nic nezůstalo nezpracované) a FailedCount je nula. Cesta zrušení vrací False s nastaveným Report.Cancelled místo vyvolání výjimky

Poznámky

Příklad

var
  Options: TPdfAttachmentBatchOptions;
  Report: TPdfAttachmentBatchReport;
  Streams: array of TStream;
  I: Integer;
begin
  Pdf1.LoadFromFile('with-attachments.pdf');
  SetLength(Streams, Pdf1.AttachmentCount);
  for I := 0 to High(Streams) do
    Streams[I] := TFileStream.Create('out\' + Pdf1.AttachmentName[I], fmCreate);
  try
    Options := TPdfAttachmentBatchOptions.Default;
    Options.StopOnError := False;
    if not Pdf1.ExtractAttachmentsToStreams(Streams, Options, Report) then
      ShowMessage(Format('%d extracted, %d failed, %d skipped',
        [Report.ExtractedCount, Report.FailedCount, Report.SkippedCount]));
  finally
    for I := 0 to High(Streams) do
      Streams[I].Free;
  end;
end;

Viz také

ReadAttachmentMetadata, Attachment, AttachmentCount, AttachmentName