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
- Egy olyan lánc, mint
[/ASCII85Decode /FlateDecode], az ASCII85 kimenet plusz a Flate kimenetet egy megosztott költségvetésből fogyasztja - A támogatott általános szűrők közé tartozik a
FlateDecode, azLZWDecode, azASCIIHexDecode, azASCII85Decodeés aRunLengthDecode, beleértve a PDF rövidítéseiket - A képprediktor-kimenet ugyanazt a költségvetést osztja meg, mint a megelőző általános képszűrők
- Az eredeti kódolt bemenet nem kerül terhelve, mert a költségvetés a dekódolás által előállított tágulást méri
- Minden független adatfolyam-lánc egy friss lánconkénti költségvetéssel indul, miközben a
DocumentDecodeBudgetBytesbiztosítja a különálló dokumentum-szintű felső határt
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);
}