THotPDF.DecodeBudgetBytes-egenskap

Setter det maksimale samlede antall bytes akseptert fra alle dekodingssteg i én PDF-strømfilterkjede

Deklarasjoner

// Delphi
property DecodeBudgetBytes: Int64;
function GetLastDecodeBudgetInfo(
  out AInfo: THPDFDecodeBudgetInfo): Boolean;

// C++Builder
__property __int64 DecodeBudgetBytes;
bool __fastcall GetLastDecodeBudgetInfo(
  THPDFDecodeBudgetInfo &AInfo);

Standard

268435456 bytes, eller 256 MiB

Samlet regnskap

Hvert generisk filter skriver gjennom en avgrenset strøm før data når sin støttende minnestrøm

Diagnostikk

GetLastDecodeBudgetInfo returnerer den nyeste kjedegrensen, aksepterte dekodede bytes, største steg, filtertelling, grensestatus og filteret som overskred grensen

THPDFDecodeBudgetInfo = record
  LimitBytes: Int64;
  DecodedBytes: Int64;
  PeakStageBytes: Int64;
  FilterCount: Integer;
  Exceeded: Boolean;
  ExceededFilter: AnsiString;
end;

Metoden returnerer False til minst ett filter er dekodet av dokumentinstansen

Feiladferd

Lavnivå-dekoding opphever EHPDFDecodeBudgetError når et steg overskrider det samlede budsjettet; høynivå-lesemetoder som allerede rapporterer feil gjennom False eller nil bevarer den kontrakten mens GetLastDecodeBudgetInfo eksponerer årsaken

Sett DecodeBudgetBytes til null kun for betrodde innganger som krever ubegrenset per-kjede-ekspansjon; negative verdier opphever ERangeError

Delphi-eksempel

PDF.DecodeBudgetBytes := 64 * 1024 * 1024;
if not PDF.ExtractEmbeddedFileBytes('payload.bin', Bytes) then
  if PDF.GetLastDecodeBudgetInfo(Info) and Info.Exceeded then
    Writeln('Decode limit reached in ', Info.ExceededFilter);

C++Builder-eksempel

pdf->DecodeBudgetBytes = 64LL * 1024 * 1024;
if (!pdf->ExtractEmbeddedFileBytes("payload.bin", bytes)) {
    THPDFDecodeBudgetInfo info;
    if (pdf->GetLastDecodeBudgetInfo(info) && info.Exceeded)
        ShowMessage("Decode limit reached in " + info.ExceededFilter);
}

Relaterte API-er