function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
| Destinations | Open array of TStream. Én stream pr. vedhæftning, i dokumentrækkefølge. En nil-plads springer den vedhæftning over uden at skrive noget. Streamene forbliver ejet af kalderen |
| Options | TPdfAttachmentBatchOptions. Batchgrænser og -adfærd: MaxAttachments, MaxFileBytes, MaxTotalBytes, ChunkBytes og StopOnError. Start fra TPdfAttachmentBatchOptions.Default |
| Report | TPdfAttachmentBatchReport. Ved returnering bærer den ét element pr. vedhæftning (Metadata, State, BytesWritten, ErrorMessage) plus samlede tællere (AttachmentCount, ExtractedCount, SkippedCount, FailedCount, BytesWritten, PeakBufferBytes, Cancelled, Completed) |
| CancellationToken | IPdfCancellationToken. Valgfrit token, der poll'es før hver vedhæftning og mellem skrive-chunks; nil kører batchen uden cancellation-kontroller |
| Result | Boolean. True kun, når batchen blev fuldført uden cancellation og med nul fejlede vedhæftninger; oversprungne poster tælles ikke som fejl |
Batch-modstykke til at læse Attachment ét indeks ad gangen. Dokumentets vedhæftninger fanges én gang, og hver payload dekodes og skubbes ind i sin destinations-stream, mens hvert udfald registreres pr. vedhæftning i Report.Items
Destinations-arrayet skal indeholde præcis én stream pr. vedhæftning i dokumentet, ellers udløses en EPdfError, før en eneste byte læses. En nil-post i arrayet markerer vedhæftningen som oversprunget (paesSkipped) i stedet for at afbryde batchen
Options valideres på forhånd og udløser EPdfError, når de er ugyldige: MaxAttachments skal være større end nul, MaxFileBytes og MaxTotalBytes må ikke være negative, og ChunkBytes skal være større end nul. TPdfAttachmentBatchOptions.Default leverer 10000 vedhæftninger, en grænse på 256 MB pr. fil, en samlet grænse på 1 GB, 1 MB skrive-chunks og StopOnError = True
Hver vedhæftning ender i en af tilstandene i TPdfAttachmentExtractionState: paesExtracted ved succes, paesSkipped for en nil-destination, paesUnreadable, når payload'en ikke kan åbnes eller dekodes, paesFileLimit eller paesAggregateLimit, når en størrelsesgrænse overskrides, paesWriteFailed, når destinations-streamen rejser fejl, og paesCancelled, når tokenet fyres. Med StopOnError sat standser den første fejl løkken, og de resterende poster forbliver paesNotProcessed
Funktionen returnerer True kun, når Report.Completed er sat (ingen cancellation, intet tilbage at behandle) og FailedCount er nul. Cancellation-stien returnerer False med Report.Cancelled sat i stedet for at rejse fejl
ChunkBytes styrer, hvor fint den buffer skubbes ind i streamen, ikke allokeringstørrelsen. Report.PeakBufferBytes registrerer den største anvendte buffer
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;