THotPDF.DecodeLoadedStreamToStream Method
Avkodare en inläst PDF-stream genom hela sin filterkedja och skriver det sista steget direkt till en stream som ägs av anroparen
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;
Enhet
HPDFDoc
Parametrar
| Namn | Syfte |
|---|---|
AStream | Inläst THPDFStreamObject vars /Filter -posten avkodas |
Output | Anroparägd destination som tar emot avkodade byte vid sin aktuella position |
CancellationToken | Valfri samarbetsvillig avbrottning som delas med egna filtersteg |
Info | Tar emot antal in- och utbyte, filterräknare, djup, status, filter som misslyckades och diagnostik |
Returvärde
Returnerar True bara när varje begärt steg lyckas
Användningsanteckningar
- Det sista filtret skriver till
Outpututan att skapa en andra fullstor slutlig minnesstream - Mellanliggande steg använder
THPDFAdaptiveTempStreamoch spiller över till egna temporära filer vidLoadedStreamMemoryThreshold - Varje steg begränsas av
DecodeBudgetBytesoch varje avkodad byte dränerar ocksåDocumentDecodeBudgetBytes - ASCII85 kräver en exakt
~>som slutmarkör och ASCIIHex kräver>; felaktiga inlästa pipelines misslyckas i stället för att acceptera avhuggen data DecodeFilterLimitavvisar överdimensionerade arrayer innan stegen allokerasDecodePipelineDepthLimit, detektering av cykliska indirekta referenser och av rekursion i samma stream sätter gränser för fientliga objektgrafer- Källstreamens position återställs efter lyckat resultat eller fel
- Registrerade
IHPDFCustomStreamFilter-steg delar samma samlade budgetar och pipelinedjup - Egen push- och pull-utdata isoleras i en adaptiv tillfällig stream tills det egna steget har lyckats
- Avbrottsöverlasten returnerar
dpsCancelledi stället för att läcka utEHPDFOperationCancelled - En strömmande destination som misslyckas kan innehålla byte som accepterats före felet; använd en tillfällig destination när atomisk utdata krävs
Diagnostik
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 skiljer på ogiltiga streams och filter, gränser för filterantal och djup, cykliska referenser, rekursiva streams, filter som inte stöds, budgetfel, avkodarfel, egna fel, avbrott och överträdelser av seek-kontraktet
Exempel
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;