THotPDF.DecodeLoadedStreamToStream metódus
Dekódol egy betöltött PDF-adatfolyamot a teljes szűrőláncán keresztül, és az utolsó fázist közvetlenül egy hívó által birtokolt adatfolyamba írja
Deklaráció
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Egység
HPDFDoc
Paraméterek
| Név | Cél |
|---|---|
AStream | Betöltött THPDFStreamObject, amelynek /Filter bejegyzése dekódolásra kerül |
Output | |
Output | Hívó által birtokolt cél, amely dekódolt bájtokat fogad az aktuális pozíciójában |
Info | Bemeneti és kimeneti bájtszámokat, szűrőszámokat, mélységet, állapotot, hibás szűrőt és diagnosztikát fogad |
Visszatérési érték
Csak akkor ad vissza True értéket, ha minden kért fázis sikeres
Használati megjegyzések
- Az utolsó szűrő az
Output-ba ír egy második teljes méretű végső memória-adatfolyam létrehozása nélkül - A közbülső fázisok
THPDFAdaptiveTempStream-et használnak, és aLoadedStreamMemoryThresholdután saját ideiglenes fájlokba öntik ki - Minden fázist a
DecodeBudgetByteskorlátoz, és minden dekódolt bájt aDocumentDecodeBudgetBytes-t is fogyasztja - Az ASCII85 pontos
~>végjelet követel meg, és az ASCIIHex>-et; a hibás betöltött csővezetékek a csonkolt adatok elfogadása helyett elbuknak - A
DecodeFilterLimitelutasítja a túlméretezett tömböket a fázis-lefoglalás előtt - A
DecodePipelineDepthLimit, a ciklikus közvetett hivatkozás-észlelés a ugyanaz-adatfolyam rekurzió-észlelés korlátozzák az ellenséges objektum-gráfokat - A forrás adatfolyam-pozíció siker vagy hiba után visszaállítódik
- Egy meghibásodott adatfolyam-cél tartalmazhat a hiba előtt már elfogadott bájtokat; használjon ideiglenes célt, ha atomi kimenetre van szükségaz
IHPDFCustomStreamFilterfázisok ugyanazokat az összesített kereteket és futószalag-mélységet osztják - Az egyéni push és pull kimenet adaptív ideiglenes streamben izolálódik, amíg az egyéni fázis le nem fut sikeresen
- A megszakítási overload
dpsCancelled-t ad visszaEHPDFOperationCancelleddobása helyett
Diagnosztika
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
A Status megkülönbözteti az érvénytelen adatfolyamokat és szűrőket, a szűrőszám- és mélység-korlátokat, a ciklikus hivatkozásokat, a rekurzív adatfolyamokat, a nem támogatott szűrőket, a költségvetési hibákat és a dekóder-hibákat
Példa
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;