THotPDF.DecodeLoadedStreamToStream Method
Decodeert een geladen PDF-stream via zijn volledige filterketen en schrijft de laatste fase direct naar een stream in eigendom van de aanroeper
Declaratie
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload; function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; CancellationToken: THPDFCancellationToken; out Info: THPDFDecodePipelineInfo): Boolean; overload;
Eenheid
HPDFDoc
Parameters
| Naam | Doel |
|---|---|
AStream | Geladen THPDFStreamObject waarvan de /Filter-regel wordt gedecodeerd |
Output | Bestemming in eigendom van de aanroeper die gedecodeerde bytes ontvangt op de huidige positie |
CancellationToken | Optionele coöperatieve annulering die met aangepaste filterstadia wordt gedeeld |
Info | Ontvangt in- en uitvoerbyte-aantallen, filteraantallen, diepte, status, falende filter en diagnostiek |
Retourwaarde
Geeft alleen True terug wanneer elk gevraagd stadium slaagt
Gebruiksopmerkingen
- Het laatste filter schrijft naar
Outputzonder een tweede volledig formaat eindstream in het geheugen te maken - Tussenstadia gebruiken
THPDFAdaptiveTempStreamen lopen naLoadedStreamMemoryThresholdover naar eigen tijdelijke bestanden - Elk stadium blijft begrensd door
DecodeBudgetBytesen elke gedecodeerde byte verbruikt ookDocumentDecodeBudgetBytes - ASCII85 vereist een exacte
~>-eindmarkering en ASCIIHex vereist>; misvormde geladen pijplijnen falen in plaats van afgekapte gegevens te accepteren DecodeFilterLimitwijst te grote arrays af vóór toewijzing van de stadiaDecodePipelineDepthLimit, detectie van cyclische indirecte verwijzingen en detectie van recursie binnen dezelfde stream begrenzen vijandige objectgrafen- De bronstreampositie wordt hersteld na succes of falen
- Geregistreerde
IHPDFCustomStreamFilter-stadia delen dezelfde geaggregeerde budgetten en pijplijndiepte - Aangepaste push- en pull-uitvoer wordt geïsoleerd in een adaptieve tijdelijke stream totdat dat aangepaste stadium slaagt
- De annuleringsoverload geeft
dpsCancelledterug in plaats vanEHPDFOperationCancelledte laten lekken - Een mislukte streamingbestemming kan bytes bevatten die vóór de storing al waren geaccepteerd; gebruik een tijdelijke bestemming wanneer atomaire uitvoer vereist is
Diagnostiek
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 onderscheidt ongeldige streams en filters, limieten voor filteraantal en diepte, cyclische verwijzingen, recursieve streams, niet-ondersteunde filters, budgetfalen, decoderfouten, aangepaste fouten, annulering en schendingen van het seek-contract
Voorbeeld
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;