THotPDF.DecodeLoadedStreamToStream Method
Iškoduoja įkeltą PDF srautą per visą jo filtrų grandinę, o paskutiniąją pakopą rašo tiesiogiai į kvietėjo valdomą srautą
Deklaracija
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
Parametrai
| Pavadinimas | Paskirtis |
|---|---|
AStream | Įkeltasis THPDFStreamObject, kurio /Filter įrašas iškoduotas |
Output | Kvietėjo valdoma paskirties vieta, gaunanti iškoduotus baitus dabartinėje pozicijoje |
CancellationToken | Neprivaloma bendradarbiška atšaukimo galimybė, bendra su pasirinktiniais filtro etapais |
Info | Priima įvesties ir išvesties baitų skaičius, filtrų skaičius, gylį, būseną, nesėkusį filtrą ir diagnostiką |
Grąžinama reikšmė
Grąžina True tik tada, kai visos pageidautos pakopos pavyksta
Naudojimo pastabos
- Paskutinis filtras rašo į
Output, nesukurdamas antrojo pilno dydžio galutinės atminties srauto - Tarpinės pakopos naudoja
THPDFAdaptiveTempStream, o pasiekusiosLoadedStreamMemoryThresholdperpilamos į savuosius laikinuosius failus - Kiekviena pakopa lieka apribota
DecodeBudgetBytes, o kiekvienas iškoduotas baitas papildomai eikvojaDocumentDecodeBudgetBytes - ASCII85 reikalauja tikslaus
~>pabaigos ženklo, o ASCIIHex —>; netinkami įkelti konvejeriai sužlunga, vietoj to kad priimtų nukirstus duomenis DecodeFilterLimitper didelius masyvus atmeta dar prieš skiriant pakopų atmintįDecodePipelineDepthLimit, ciklinių netiesioginių nuorodų aptikimas ir to paties srauto rekursijos aptikimas apriboja priešiškus objektų grafus- Šaltinio srauto pozicija atstatoma ir sėkmės, ir nesėkmės atveju
- Registruotos
IHPDFCustomStreamFilterpakopos naudoja tuos pačius bendruosius biudžetus ir konvejerio gylį - Pasirinktinė push ir pull išvestis izoliuojama adaptyviajame laikinajame sraute, kol ta pasirinktinė pakopa pavyksta
- Atšaukimo perkrava grąžina
dpsCancelled, o ne išduodaEHPDFOperationCancelled - Nesėkmingoje srautinėje paskirtyje gali būti iki nesėkmės priimtų baitų, todėl kai reikia atominės išvesties, naudokite laikinąją paskirtį
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 atskiria netinkamus srautus ir filtrus, filtrų skaičiaus bei gylio ribas, ciklines nuorodas, rekursyviuosius srautus, nepalaikomus filtrus, biudžeto nesėkmes, dekoderių nesėkmes, pasirinktines nesėkmes, atšaukimą ir pozicionavimo sutarties pažeidimus
Pavyzdys
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;