function ReadAttachmentMetadata(MaxAttachments: Integer = 10000): TPdfAttachmentMetadataArray;
Metoda jednou vyjmenuje přílohy na úrovni dokumentu a vrátí záznamy ve vlastnictví volajícího obsahující Index, Name, Description, MimeType, Relationship, dekódovaný Size a Readable
MaxAttachments se kontroluje před naplněním výsledného pole, takže nedůvěryhodný dokument nemůže vyvolat neomezenou alokaci metadat
Dotaz na velikost nekopíruje bajty payloadu do paměti PDFium Delphi Component, i když je PDFium může interně dekódovat, aby zjistilo dekódovanou délku
function ExtractAttachmentsToStreams(const Destinations: array of TStream; const Options: TPdfAttachmentBatchOptions; out Report: TPdfAttachmentBatchReport; const CancellationToken: IPdfCancellationToken = nil): Boolean;
Destinations musí obsahovat přesně jeden slot na přílohu dokumentu a následuje stejné nulové pořadí jako Attachment[Index]
nil cíl označí danou položku jako paesSkipped, takže volající si vybere přílohy bez druhého průchodu
Každý neprázdný payload se dekóduje přes PDFium do jednoho dočasného bufferu PDFium Delphi Component a pak se z něj zapisuje po kusech velikosti ChunkBytes
Buffer se uvolní před další přílohou, takže PDFium Delphi Component nikdy nedrží celou dávku, ale veřejné PDFium API příloh nepodporuje range čtení a může interně použít vlastní paměť pro dekódování celého payloadu
Proudy zůstávají ve vlastnictví volajícího, zápis začíná na aktuální pozici každého proudu a metoda je nepřetáčí ani nezkracuje
Zrušení nebo výjimka cíle může zanechat bajty už zapsané do daného proudu, takže volající, kteří potřebují transakční výstup, by měli dodávat dočasné proudy a zveřejnit je až po úspěšném reportu
| Field | Default | Meaning |
|---|---|---|
MaxAttachments | 10000 | Maximální počet položek metadat a reportu |
MaxFileBytes | 256 MiB | Maximální dekódovaná velikost jedné přílohy |
MaxTotalBytes | 1 GiB | Maximální počet bajtů zapsaných napříč všemi cíli |
ChunkBytes | 1 MiB | Maximální počet bajtů předaných jednomu zápisu do proudu |
StopOnError | True | Zastaví po první nečitelné, překračující rozpočet nebo zápisem selhavší položce |
Každý záznam TPdfAttachmentMetadata popisuje jednu nativní přílohu a TPdfAttachmentMetadataArray ukládá snapshot metadat
Každá TPdfAttachmentBatchItem kombinuje metadata, TPdfAttachmentExtractionState, zapsané bajty a text případné chyby, zatímco TPdfAttachmentBatchItems ukládá všechny výsledky po položkách
Hodnoty TPdfAttachmentExtractionState jsou paesNotProcessed, paesSkipped, paesExtracted, paesUnreadable, paesFileLimit, paesAggregateLimit, paesCancelled a paesWriteFailed
TPdfAttachmentBatchReport počítá AttachmentCount, ExtractedCount, SkippedCount a FailedCount vedle BytesWritten a PeakBufferBytes
Completed znamená, že každá položka dospěla do koncového stavu bez zrušení, zatímco výsledek funkce navíc vyžaduje FailedCount = 0
PeakBufferBytes hlásí největší buffer payloadu PDFium Delphi Component a nezahrnuje soukromou paměť použitou PDFium při dekódování
var Options: TPdfAttachmentBatchOptions;
var Report: TPdfAttachmentBatchReport;
Options := TPdfAttachmentBatchOptions.Default;
Options.MaxFileBytes := 64 * 1024 * 1024;
Options.MaxTotalBytes := 256 * 1024 * 1024;
if not Pdf1.ExtractAttachmentsToStreams(Destinations, Options, Report) then
HandleAttachmentBatchFailure(Report);