THotPDF.DecodeLoadedStreamToStream Method
Afkoder en indlæst PDF-stream gennem dens komplette filterkæde og skriver det sidste trin direkte til en kalder-ejet stream
Deklaration
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload;
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; CancellationToken: THPDFCancellationToken;
out Info: THPDFDecodePipelineInfo): Boolean; overload;
Enhed
HPDFDoc
Parametre
| Navn | Formål |
|---|---|
AStream | Loaded THPDFStreamObject whose /Filter entry is decoded |
Output | Kalder-ejet destination, der modtager afkodede bytes ved sin aktuelle position |
CancellationToken | Optional cooperative cancellation shared with custom filter stages |
Info | Modtager input- og output-byte-optælling, filterantal, dybde, status, fejlende filter og diagnostik |
Returværdi
Returns True only when every requested stage succeeds
Brugsnoter
- The final filter writes to
Outputuden at oprette en anden fuld størrelse endelig memory stream - Mellemliggende trin bruger
THPDFAdaptiveTempStreamog spilder over i ejede midlertidige filer efterLoadedStreamMemoryThreshold - Every stage remains bounded by
DecodeBudgetBytesand every decoded byte also consumesDocumentDecodeBudgetBytes - ASCII85 requires an exact
~>end marker and ASCIIHex requires>; misdannede indlæste pipelines fejler i stedet for at acceptere afkortede data DecodeFilterLimitrejects oversized arrays before stage allocationDecodePipelineDepthLimitog detektering af cykliske indirekte referencer og same-stream-rekursion afgrænser fjendtlige objektgrafer- Kildestreamens position gendannes efter succes eller fejl
- Registrerede
IHPDFCustomStreamFilter-trin deler de samme samlede budgetter og pipeline-dybde - Custom push- og pull-output isoleres i en adaptiv midlertidig stream, indtil det custom-trin er lykkedes
- The cancellation overload returns
dpsCancelledinstead of leakingEHPDFOperationCancelled - En fejlende streamingdestination kan indeholde bytes, der allerede blev accepteret før fejlen; brug en midlertidig destination, når atomart output er påkrævet
Diagnostics
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 skelner ugyldige streams og filtre, filterantal- og dybdegrænser, cykliske referencer, rekursive streams, ikke-understøttede filtre, budgetfejl, dekoderfejl, brugerdefinerede fejl, annullering og overtrædelser af seek-kontrakten
Eksempel
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;