THotPDF.DecodeLoadedStreamToStream Method
Dekóduje stream načítaného PDF cez jeho kompletný reťazec filtrov a záverečnú etapu zapisuje priamo do streamu volajúceho
Deklarácia
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload;
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; CancellationToken: THPDFCancellationToken;
out Info: THPDFDecodePipelineInfo): Boolean; overload;
Unit
HPDFDoc
Parametre
| Názov | Účel použitia |
|---|---|
AStream | Načítaný THPDFStreamObject, ktorého položka /Filter je dekódovaná |
Output | Cieľ vo vlastníctve volajúceho, ktorý prijíma dekódované bajty na svojej aktuálnej pozícii |
CancellationToken | Voliteľné kooperatívne rušenie zdieľané s vlastnými etapami filtrov |
Info | Prijíma počty vstupných a výstupných bajtov, počty filtrov, hĺbku, stav, zlyhavší filter a diagnostiku |
Návratová hodnota
Vracia True len vtedy, keď uspeje každá požadovaná etapa
Poznámky k použitiu
- Záverečný filter zapisuje do
Outputbez vytvárania druhého plno veľkého finálneho memory streamu - Medzi etapy používajú
THPDFAdaptiveTempStreama poLoadedStreamMemoryThresholdsa presypajú do vlastnených dočasných súborov - Každá etapa zostáva ohraničená
DecodeBudgetBytesa každý dekódovaný bajt zároveň spotrebúvaDocumentDecodeBudgetBytes - ASCII85 vyžaduje presnú koncovú značku
~>a ASCIIHex vyžaduje>; poškodené načítané pipeline zlyhajú namiesto prijatia skrátených dát DecodeFilterLimitodmieta príliš veľké polia skôr, než dôjde k alokácii etápDecodePipelineDepthLimit, detekcia cyklických nepriamych odkazov a detekcia rekurzie na tom istom streame ohraničujú nepriateľské grafy objektov- Pozícia zdrojového streamu sa obnoví po úspechu aj po zlyhaní
- Zaregistrované etapy
IHPDFCustomStreamFilterzdieľajú rovnaké agregované rozpočty a hĺbku pipeline - Vlastný push a pull výstup je izolovaný v adaptívnom dočasnom streame, kým táto vlastná etapa neuspeje
- Preťaženie s rušením vracia
dpsCancellednamiesto únikuEHPDFOperationCancelled - Zlyhavší streamový cieľ môže obsahovať bajty už prijaté pred zlyhaním; keď je potrebný atomický výstup, použite dočasný cieľ
Diagnostika
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
CustomFilterCount: Integer;
CustomFilterFailureCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status rozlišuje neplatné streamy a filtre, limity počtu filtrov a hĺbky, cyklické odkazy, rekurzívne streamy, nepodporované filtre, zlyhania rozpočtov, zlyhania dekodérov, vlastné zlyhania, rušenie a porušenia seek zmluvy
Príklad
Output := TFileStream.Create('payload.bin', fmCreate);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output, Info) then
raise Exception.Create(String(Info.Diagnostic));
finally
Output.Free;
end;