THotPDF.DecodeBudgetBytes Property

Postavlja najveći ukupni broj bajtova prihvaćenih iz svih faza dekodiranja u jednom lancu filtera toka PDF-a

Deklaracije

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

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

Zadana vrijednost

268435456 bajtova, odnosno 256 MiB

Ukupno računovodstvo

Svaki generički filter zapisuje kroz ograničeni tok prije nego što podaci dosegnu svoj pozadinski memorijski tok

Dijagnostika

GetLastDecodeBudgetInfo vraća najnovije ograničenje lanca, prihvaćene dekodirane bajtove, najveću fazu, broj filtera, status ograničenja i filter koji je prešao ograničenje

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

Metoda vraća False sve dok instanca dokumenta ne dekodira barem jedan filter

Failure behaviour

Dekodiranje niske razine podiže EHPDFDecodeBudgetError kada faza premaši ukupni proračun; metode čitanja visoke razine koje već izvještavaju o neuspjehu putem False ili nil čuvaju taj ugovor, dok GetLastDecodeBudgetInfo izlaže razlog

Postavite DecodeBudgetBytes na nulu samo za pouzdane ulaze koji zahtijevaju neograničeno proširenje po lancu; negativne vrijednosti podižu ERangeError

Delphi example

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 example

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);
}

Povezani API-ji