Lastnost THotPDF.DecodeBudgetBytes

Nastavi največje skupno število bajtov, sprejetih iz vseh stopenj dekodiranja v eni verigi filtrov toka PDF

Deklaracije

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

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

Privzeto

268435456 bajtov ali 256 MiB

Skupna kontabilnost

Vsak generični filter zapisuje skozi omejen tok, preden podatki dosežejo svoj podporni pomnilniški tok

Diagnostike

GetLastDecodeBudgetInfo vrne najnovejšo omejitev verige, sprejete dekodirane bajte, največjo stopnjo, število filtrov, status omejitve in filter, ki je presegel omejitev

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

Metoda vrne False, dokler instanca dokumenta ni dekodirala vsaj enega filtra

Vedenje ob napaki

Nizkoravensko dekodiranje sproži EHPDFDecodeBudgetError, ko stopnja preseže skupni proračun; visokoravenske metode branja, ki o neuspehu že poročajo prek False ali nil, ohranijo to pogodbo, GetLastDecodeBudgetInfo pa izpostavi razlog

Nastavite DecodeBudgetBytes na ničlo le za zaupanja vredne vnose, ki zahtevajo neomejeno razširitev na verigo; negativne vrednosti sprožijo ERangeError

Primer v Delphiju

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

Primer v C++Builderju

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