THotPDF.DecodeLoadedStreamToStream Method
Dekodira učitani PDF tok kroz njegov potpuni lanac filtera i zapisuje konačnu fazu izravno u tok u vlasništvu pozivatelja
Deklaracija
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Jedinica
HPDFDoc
Parametri
| Naziv | Svrha |
|---|---|
AStream | Loaded THPDFStreamObject whose /Filter entry is decoded |
Output | Caller-owned destination that receives decoded bytes at its current position |
CancellationToken | Neobavezno kooperativno otkazivanje dijeljeno s vlastitim fazama filtera |
Info | Prima brojače ulaznih i izlaznih bajtova, brojače filtera, dubinu, status, filter koji je pao i dijagnostiku |
Povratna vrijednost
Vraća True samo kada svaka zatražena faza uspije
Napomene o uporabi
- Završni filter zapisuje u
Outputbez stvaranja drugog potpuno velikog završnog memorijskog toka - Međufaze koriste
THPDFAdaptiveTempStreami nakonLoadedStreamMemoryThresholdse prelijevaju u vlastite privremene datoteke - Svaka faza ostaje ograničena s
DecodeBudgetBytes, a svaki dekodirani bajt troši iDocumentDecodeBudgetBytes - ASCII85 zahtijeva točan završni marker
~>, a ASCIIHex>; deformirani učitani cjevovodi padaju umjesto da prihvate skraćene podatke DecodeFilterLimitodbacuje prevelike nizove prije dodjele fazaDecodePipelineDepthLimit, detekcija cikličnih neizravnih referenci i detekcija rekurzije istog toka ograničavaju neprijateljske grafove objekata- Pozicija izvornog toka obnovi se nakon uspjeha ili neuspjeha
- Registrirane faze
IHPDFCustomStreamFilterdijele iste zbirne proračune i dubinu cjevovoda - Vlastiti push i pull ispis izolira se u prilagodljivom privremenom toku dok ta vlastita faza ne uspije
- Preopterećenje s otkazivanjem vraća
dpsCancelledumjesto da propuštaEHPDFOperationCancelled - Neuspjelo odredište tokovnog zapisa može sadržavati bajtove već prihvaćene prije neuspjeha; koristite privremeno odredište kada je potreban atomski ispis
Dijagnostika
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 razlikuje nevažeće tokove i filtere, ograničenja broja filtera i dubine, ciklične reference, rekurzivne tokove, nepodržane filtere, prekoračenja proračuna, pogreške dekodera, vlastite pogreške, otkazivanja i kršenja ugovora o pozicioniranju
Example
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;