Metoda THotPDF.DecodeLoadedStreamToStream
Dekóduje načtený proud PDF přes jeho kompletní řetězec filtrů a zapisuje koncovou fázi přímo do proudu vlastněného volajícím
Deklarace
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Jednotka
HPDFDoc
Parametry
| Název | Účel |
|---|---|
AStream | Načtený THPDFStreamObject, jehož položka /Filter je dekódována |
Output | Cíl vlastněný volajícím, který přijímá dekódované bajty na své aktuální pozici |
Info | Přijímá počty vstupních a výstupních bajtů, počty filtrů, hloubku, stav, selhávající filtr a diagnostiku |
Info | Přijímá počty vstupních a výstupních bajtů, počty filtrů, hloubku, stav, selhavší filtr a diagnostiku |
Návratová hodnota
Vrací True jen tehdy, když uspěje každá požadovaná fáze
Poznámky k použití
- Koncový filtr zapisuje do
Outputbez vytvoření druhého výsledného paměťového proudu plné velikosti - Mezilehlé stupně používají
THPDFAdaptiveTempStreama přelévají se do vlastních dočasných souborů po překročeníLoadedStreamMemoryThreshold - Každý stupeň zůstává ohraničen
DecodeBudgetBytesa každý dekódovaný bajt navíc spotřebováváDocumentDecodeBudgetBytes - ASCII85 vyžaduje přesnou koncovou značku
~>a ASCIIHex vyžaduje> DecodeFilterLimitodmítá nadměrná pole před alokací fázeDecodePipelineDepthLimit, detekce cyklických nepřímých referencí a detekce rekurze stejného proudu ohraničují advesariální grafy objektů- Pozice zdrojového proudu je obnovena po úspěchu nebo selhání; hranici hloubky zpracování přitom střeží DecodePipelineDepthLimit
- Registrované stupně
IHPDFCustomStreamFiltersdílejí stejné agregované rozpočty i hloubku pipeline - Výstup vlastních push a pull stupňů zůstává izolovaný v adaptivním dočasném streamu, dokud daný vlastní stupeň neuspěje
- Přetížení se zrušením vrací
dpsCancelledmísto propouštěníEHPDFOperationCancelled - Selhaný streamovací cíl může obsahovat bajty již přijaté před selháním; použijte dočasný cíl, když je vyžadován atomický výstup
Diagnostika
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status rozlišuje neplatné proudy a filtry, limity počtu filtrů a hloubky, cyklické reference, rekurzivní proudy, nepodporované filtry, selhání rozpočtu a selhání dekodéru
Pří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;