THotPDF.DecodeBudgetBytes tulajdonság

Beállítja az egyik PDF adatfolyam-szűrőláncban lévő összes dekódolási fázisból elfogadott bájtok maximális aggregált számát

Deklarációk

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

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

Alapértelmezett

268435456 bájt, azaz 256 MiB

Aggregált elszámolás

Minden általános szűrő egy korlátozott adatfolyamon keresztül ír, mielőtt az adat elérné a háttér-memória-adatfolyamát

Diagnosztika

A GetLastDecodeBudgetInfo visszaadja a legutóbbi lánc-korlátot, az elfogadott dekódolt bájtokat, a legnagyobb fázist, a szűrőszámot, a korlát-állapotot és azt a szűrőt, amely túllépte a korlátot

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

A metódus False értéket ad vissza, amíg legalább egy szűrőt nem dekódolt a dokumentum-példány

Hibaviselkedés

Az alacsony szintű dekódolás EHPDFDecodeBudgetError-t vált ki, amikor egy fázis túllépi az aggregált költségvetést; a magas szintű olvasási metódusok, amelyek már False vagy nil révén jelentik a hibát, megtartják azt a szerződést, miközben a GetLastDecodeBudgetInfo közzéteszi az okot

Csak megbízható bemenetekhez állítsa a DecodeBudgetBytes-t nullára, amelyek korlátlan lánconkénti tágulást igényelnek; a negatív értékek ERangeError-t váltanak ki

Delphi példa

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 példa

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

Kapcsolódó API-k