PDFium Delphi Component Reference API

Dávková extrakce příloh

Komponenta: TPdf  ·  Jednotka: PDFium
Vyjmenuje vložené přílohy jedním průchodem a zapíše jejich dekódované payloady do proudů ve vlastnictví volajícího pod explicitní kontrolou zdrojů

ReadAttachmentMetadata

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

ExtractAttachmentsToStreams

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

Volby

FieldDefaultMeaning
MaxAttachments10000Maximální počet položek metadat a reportu
MaxFileBytes256 MiBMaximální dekódovaná velikost jedné přílohy
MaxTotalBytes1 GiBMaximální počet bajtů zapsaných napříč všemi cíli
ChunkBytes1 MiBMaximální počet bajtů předaných jednomu zápisu do proudu
StopOnErrorTrueZastaví po první nečitelné, překračující rozpočet nebo zápisem selhavší položce

Report

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í

Příklad

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);

Viz také

Attachment, AttachmentCount, AttachmentDescription, AttachmentName, AttachmentType