THotPDF.DecodeLoadedStreamToStream Method
Dekoduje wczytany strumień PDF przez jego pełny łańcuch filtrów i zapisuje etap końcowy bezpośrednio do strumienia należącego do wywołującego
Deklaracja
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Jednostka
HPDFDoc
Parametry
| Nazwa | Przeznaczenie |
|---|---|
AStream | Loaded THPDFStreamObject whose /Filter entry is decoded |
Output | Caller-owned destination that receives decoded bytes at its current position |
CancellationToken | Optional cooperative cancellation shared with custom filter stages |
Info | Receives input and output byte counts, filter counts, depth, status, failing filter, and diagnostics |
Wartość zwracana
Zwraca True tylko wtedy, gdy każdy żądany etap kończy się powodzeniem
Uwagi dotyczące użycia
- Filtr końcowy zapisuje do
Outputbez tworzenia drugiego pełnowymiarowego końcowego strumienia w pamięci - Etapy pośrednie używają
THPDFAdaptiveTempStreami przelewają do należych plików tymczasowych poLoadedStreamMemoryThreshold - Każdy etap pozostaje ograniczony przez
DecodeBudgetBytes, a każdy zdekodowany bajt konsumuje teżDocumentDecodeBudgetBytes - Etapy pośrednie pozostają ograniczone przez
DecodeBudgetBytes, a każdy zdekodowany bajt zużywa równieżDocumentDecodeBudgetBytes DecodeFilterLimitodrzuca oversized tablice przed przydzieleniem etapuDecodePipelineDepthLimit, wykrywanie cyklicznych odwołań pośrednich oraz wykrywanie rekurencji tego samego strumienia ograniczają wrogie grafy obiektów- Pozycja strumienia źródłowego jest przywracana po powodzeniu lub niepowodzeniu
- Zarejestrowane etapy
IHPDFCustomStreamFilterdzielą te same zagregowane budżety i głębokość potoku - Nieudane miejsce docelowe przesyłania strumieniowego może zawierać bajty już zaakceptowane przed niepowodzeniem; użyj miejsca docelowego tymczasowego, gdy wymagane jest atomowe wyjście
- Przeciążenie z anulowaniem zwraca
dpsCancelledzamiast wypuszczaćEHPDFOperationCancelled - Nieudany cel strumieniowy może zawierać bajty przyjęte przed porażką; użyj celu tymczasowego, gdy wymagane jest wyjście atomowe
Diagnostyka
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status rozróżnia nieprawidłowe strumienie i filtry, limity liczby filtrów i głębokości, odwołania cykliczne, strumienie rekurencyjne, nieobsługiwane filtry, niepowodzenia budżetu i niepowodzenia dekoderów
Przykład
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;