THotPDF.DecodeLoadedStreamToStream Method
Dekodira učitani PDF tok kroz njegov kompletan lanac filtera i piše završnu fazu direktno u tok u vlasništvu pozivaoca
Deklaracija
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Jedinica
HPDFDoc
Parametri
| Ime | Namena |
|---|---|
AStream | Učitani THPDFStreamObject čiji se unos /Filter dekodira |
Output | Odredište u vlasništvu pozivaoca koje prima dekodovane bajtove na svojoj trenutnoj poziciji |
Output | Odredište u vlasništvu pozivaoca koje na svojoj tekućoj poziciji prima dekodirane bajtove |
Info | Prima brojeve ulaznih i izlaznih bajtova, brojeve filtera, dubinu, status, filter koji ne uspeva i dijagnostiku |
Povratna vrednost
Vraća True samo kada svaka tražena faza uspe
Napomene o upotrebi
- Finalni filter piše u
Outputbez kreiranja drugog finalnog toka u memoriji pune veličine - Međufaze koriste
THPDFAdaptiveTempStreami prelaze u privremene fajlove u vlasništvu nakonLoadedStreamMemoryThreshold - Svaka faza ostaje ograničena sa
DecodeBudgetBytesi svaki dekodirani bajt takođe trošiDocumentDecodeBudgetBytes - ASCII85 zahteva tačan
~>završni marker, a ASCIIHex zahteva>; loše formirani učitani lanci ne uspevaju umesto da prihvate skraćene podatke DecodeFilterLimitodbacuje prevelike nizove pre alokacije fazeDecodePipelineDepthLimit, detekcija cikličnih indirektnih referenci i detekcija rekurzije istog toka ograničavaju neprijateljske grafove objekata- Pozicija izvornog toka se vraća nakon uspeha ili neuspeha
- Neuspelo odredište strujanja može da sadrži bajtove koje je već prihvatilo pre neuspeha; koristite privremeno odredište kada je potreban atomski izlaz
IHPDFCustomStreamFilterfaze dele iste objedinjene budžete i dubinu pipeline-a - Prilagođeni push i pull izlaz izolovan je u adaptivnom privremenom toku dok ta prilagođena faza ne uspe
- Preopterećenje sa otkazivanjem vraća
dpsCancelledumesto da ispustiEHPDFOperationCancelled - Neuspešno streaming odredište može sadržati bajtove već prihvaćene pre neuspeha; koristite privremeno odredište kada je potreban atomski izlaz
Dijagnostika
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status razlikuje nevažeće tokove i filtere, ograničenja broja filtera i dubine, ciklične reference, rekurzivne tokove, nepodržane filtere, budžetske neuspehe i neuspehe dekodera
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;