Metoda THotPDF.DecodeLoadedStreamToStream
Dekodira naložen tok PDF skozi njegovo popolno verigo filtrov in zapiše končno stopnjo neposredno v tok, ki je v lasti klicatelja
Deklaracija
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Enota
HPDFDoc
Parametri
| Ime | Namen |
|---|---|
AStream | Naložen THPDFStreamObject, katerega vnos /Filter se dekodira |
Output | Cilj v lasti klicatelja, ki prejme dekodirane bajte na svojem trenutnem položaju |
Info | Prejme števce vhodnih in izhodnih bajtov, števce filtrov, globino, status, neuspešni filter in diagnostike |
Info | Prejme števila vhodnih in izhodnih bajtov, števila filtrov, globino, stanje, filter, ki ni uspel, in diagnostiko |
Vrnjena vrednost
Vrne True le, ko uspe vsaka zahtevana stopnja
Opombe o uporabi
- Končni filter zapisuje v
Outputbrez ustvarjanja drugega končnega pomnilniškega toka polne velikosti - Vmesne stopnje ostanejo omejene z
DecodeBudgetBytes, vsak dekodirani bajt pa tudi porabiDocumentDecodeBudgetBytes DecodeFilterLimitzavrne prevelika polja pred dodelitvijo stopenjDocumentDecodeBudgetBytes- ASCII85 requires an exact
~>end marker and ASCIIHex requires>; malformed loaded pipelines fail instead of accepting truncated data DecodePipelineDepthLimit, zaznavanje cikličnih posrednih referenc in zaznavanje rekurzije istega toka omejujejo sovražne grafe predmetov- Položaj izvornega toka se obnovi po uspehu ali neuspehu
DecodePipelineDepthLimit, cyclic indirect-reference detection, and same-stream recursion detection bound hostile object graphs - Položaj izvornega toka se obnovi po uspehu ali neuspehu
- Registrirane stopnje
IHPDFCustomStreamFiltersi delijo iste agregatne proračune in globino cevovoda - Izhod po meri (push in pull) je izoliran v prilagodljivem začasnem toku, dokler ta stopnja po meri ne uspe
- The cancellation overload returns
dpsCancelledinstead of leakingEHPDFOperationCancelled - Neuspešni cilj pretočnega prenosa lahko vsebuje bajte, že sprejete pred neuspehom; uporabite začasni cilj, ko je zahtevan atomski izhod
Diagnostike
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status loči neveljavne toke in filtre, omejitve števila filtrov in globine, ciklične reference, rekurzivne toke, nepodprte filtre, neuspehe proračuna in neuspehe dekodirnikov
Primer
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;