THotPDF.DecodeLoadedStreamToStream-metode
Dekoder en innlastet PDF-strøm gjennom sin komplette filterkjede og skriver det endelige steget direkte til en oppkaller-eid strøm
Deklarasjon
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Enhet
HPDFDoc
Parametere
| Navn | Formål |
|---|---|
AStream | Innlastet THPDFStreamObject hvis /Filter-oppføring dekodes |
Output | Oppkaller-eid mål som mottar dekodede bytes ved sin gjeldende posisjon |
Info | Mottar inngangs- og utgangs-bytetellinger, filtertellinger, dybde, status, feilende filter og diagnostikk |
Info | Mottar antall inndata- og utdatabyte, filtertellere, dybde, status, feilende filter og diagnostikk |
Returverdi
Returnerer True kun når hvert forespurte steg lykkes
Bruksnotater
- Det endelige filteret skriver til
Outpututen å opprette en andre full-størrelse endelig minnestrøm - Mellomliggende steg forblir avgrenset av
DecodeBudgetBytesog hver dekodede byte forbruker ogsåDocumentDecodeBudgetBytes DecodeFilterLimitavviser oversize-tabeller før steg-allokeringDocumentDecodeBudgetBytes- ASCII85 krever et eksakt
~>-sluttmerke og ASCIIHex krever>; feilformede innlastede rør feiler i stedet for å godta avkuttet data DecodePipelineDepthLimit, syklisk indirekte-referanse-deteksjon og same-strøm-rekursjons-deteksjon avgrenser fiendtlige objektgrafer- Kilde-strømposisjonen gjenopprettes etter suksess eller feil
DecodePipelineDepthLimit, sykkeldeteksjon av indirekte referanser og rekursjonsdeteksjon i samme strøm avgrenser fiendtlige objektgrafer - Kildestrømmens posisjon gjenopprettes etter suksess eller feil
- Registrerte
IHPDFCustomStreamFilter-trinn deler de samme samlede budsjettene og rørdybden - Egen push- og pull-utdata isoleres i en adaptiv midlertidig strøm til det egne trinnet lykkes
- Avbrudds-overloaden returnerer
dpsCancelledi stedet for å lekkeEHPDFOperationCancelled - Et feilet strømmende mål kan inneholde bytes allerede akseptert før feilen; bruk et midlertidig mål når atomær utdata kreves
Diagnostikk
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status skiller mellom ugyldige strømmer og filtre, filter-telling- og dybdegrenser, sykliske referanser, rekursive strømmer, filtre som ikke støttes, budsjett-feil og dekoder-feil
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;