FlateDecode éligibles à la compression maximale, remplaçant un flux uniquement lorsque l’économie d’octets mesurée dépasse un seuil de l’appelantfunction SaveAsFlateRecompressed(Stream: TStream; const Options: TPdfFlateRecompressOptions; out Report: TPdfFlateRecompressReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsFlateRecompressed(const FileName: string; const Options: TPdfFlateRecompressOptions; out Report: TPdfFlateRecompressReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium écrit d’abord une copie non incrémentale du document en mémoire courant, puis l’enveloppe effectue une marche d’accessibilité à l’échelle du document exactement comme SaveAsReachable
Chaque flux FlateDecode accessible est décodé avec PdfInflate et ré-encodé avec DeflateCompress à la compression maximale ; seuls les flux dont l’économie mesurée dépasse à la fois MinSavingBytes et MinSavingRatio sont remplacés
Les numéros d’objet et générations restent stables, donc seules les charges utiles de flux recompressées et leurs valeurs /Length directes changent ; chaque référence croisée survivante reste valide sans renumérotation
La sortie est une seule révision classique avec le trailer reconstruit portant /Root, /Info et /ID en avant
TPdfFlateRecompressOptions.MinSavingBytes et MinSavingRatio empêchent le ré-encodage de flux qui n’économiseraient pas assez, laissant les flux déjà optimaux intactsTPdfFlateRecompressReport rapporte les comptages de flux recompressés, ignorés et échoués plus les totaux d’octets de flux d’origine et recompressés/Length indirectes et les flux qui échouent au décodage sont ignorés ou échoués sans corrompre le documentAllowSignedDocument est explicitement activé car une réécriture complète invalide les plages d’octets de signature existantes
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');