FlateDecode elegibles con compresión máxima, reemplazando un stream solo cuando el ahorro de bytes medido supera un umbral definido por el llamadorfunction 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 escribe primero una copia no incremental del documento actual en memoria y luego el contenedor realiza un recorrido de alcanzabilidad sobre todo el documento, exactamente como SaveAsReachable
Cada stream FlateDecode alcanzable se decodifica con PdfInflate y se recodifica con DeflateCompress a compresión máxima; solo se reemplazan los streams cuyo ahorro medido supera tanto MinSavingBytes como MinSavingRatio
Los números y generaciones de objeto permanecen estables, de modo que solo cambian las cargas útiles de los streams recomprimidos y sus valores /Length directos; toda referencia cruzada superviviente sigue siendo válida sin renumeración
La salida es una única revisión clásica con el trailer reconstruido propagando /Root, /Info e /ID
TPdfFlateRecompressOptions.MinSavingBytes y MinSavingRatio impiden recodificar streams que no ahorrarían lo suficiente, dejando intactos los streams ya óptimosTPdfFlateRecompressReport informa los conteos de streams recomprimidos, omitidos y fallidos, más los totales en bytes de los streams originales y recomprimidos/Length indirectas y los streams que fallan al decodificar se omiten o marcan como fallidos sin corromper el documentoAllowSignedDocument se habilite de forma explícita, porque una reescritura completa invalida los rangos de bytes de las firmas existentes
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');