Metóda THotPDF.OptimizeLoadedStreams
Prepíše vybrané rodiny načítaných streamov ako Flate iba vtedy, keď je náhrada menšia o požadovaný prah
Deklarácia
function OptimizeLoadedStreams(
FilterFamilies: THPDFLoadedStreamFilterFamilies;
MinimumSavingsBytes: Int64;
out AInfo: THPDFLoadedStreamOptimizationInfo): Integer; overload;
function OptimizeLoadedStreams(
FilterFamilies: THPDFLoadedStreamFilterFamilies;
MinimumSavingsBytes: Int64;
RecompressionMode: THPDFFlateRecompressionMode;
out AInfo: THPDFLoadedStreamOptimizationInfo): Integer; overload;
Unit
HPDFDoc
Parametre
| Názov | Účel |
|---|---|
FilterFamilies | Vyberá nefiltrovaných, Flate, LZW, ASCII85, ASCIIHex a RunLength kandidátov |
MinimumSavingsBytes | Pozitívna minimálna redukcia bajtov požadovaná predtým, ako kandidát nahradí svoj zdrojový stream |
RecompressionMode | Vyberá štandardnú cestu jedného prechodu alebo deterministický výber Flate so štyrmi stratégiami s vysokým pomerom |
AInfo | Prijíma súčty naskenovaných, kandidátskych, prepísaných, nepodporovaných, zlyhaných, pred, po a ušetrených bajtov |
Návratová hodnota
Vracia počet payloadov streamov nahradených v grafe načítaných objektov
Poznámky k používaniu
CompressionLevelvyberá rýchlosť a pomer zlib, zatiaľ čoclNoneurobí z prechodu no-opfrmHighRatiovyskúša stratégie maximálnej kompresie default, filtered, run-length a Huffman-only a zachová najmenší stream kompatibilný so štandardom- Dekódovaní a komprimovaní kandidáti prelejú do vlastných dočasných súborov po
LoadedStreamMemoryThreshold, čím udržiavajú pamäť veľkých dokumentov ohraničenú - Pôvodný payload a slovník zostanú nezmenené po zlyhaní dekódovania alebo nedostatočných úsporách
- Streamy s
/DecodeParmssa preskočia, aby sa sémantika prediktora a nedefaultného LZW nemohla omylom zmeniť - Reťazce s viacerými filtrami sú spôsobilé iba vtedy, keď je vybraná a podporovaná každá rodina
- Zavolajte
SaveLoadedDocumentpo prechode na pretrvanie prijatých payloadov
Typy a diagnostika
THPDFLoadedStreamFilterFamily = (lsffUnfiltered, lsffFlate, lsffLZW,
lsffASCII85, lsffASCIIHex, lsffRunLength);
THPDFLoadedStreamFilterFamilies = set of THPDFLoadedStreamFilterFamily;
THPDFLoadedStreamOptimizationInfo = record
ScannedStreamCount: Integer;
CandidateStreamCount: Integer;
RewrittenStreamCount: Integer;
UnsupportedStreamCount: Integer;
DecodeFailureCount: Integer;
BytesBefore: Int64;
BytesAfter: Int64;
BytesSaved: Int64;
FilterStatistics: THPDFLoadedStreamFilterStatistics;
RecompressionMode: THPDFFlateRecompressionMode;
CompressionTrialCount: Integer;
end;
FilterStatistics zaznamenáva počet streamov pred optimalizáciou, kódované bajty a prideľovanie fázy na rodinu bez vynútenia ďalšieho prechodu dekódovania
Príklad
Families := [lsffUnfiltered, lsffFlate, lsffLZW];
Count := PDF.OptimizeLoadedStreams(Families, 16, frmHighRatio, Info);
if Count > 0 then
PDF.SaveLoadedDocument('optimized.pdf');