FlateDecode elegibles a compresión máxima, reemplazando un flujo solo cuando el ahorro de bytes medido supera un umbral del 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 primero escribe una copia no incremental del documento en memoria actual, luego el envoltorio realiza un recorrido de alcanzabilidad en todo el documento exactamente como SaveAsReachable
Cada flujo FlateDecode alcanzable se decodifica con PdfInflate y se recodifica con DeflateCompress a máxima compresión; solo se reemplazan los flujos cuyo ahorro medido supera tanto MinSavingBytes como MinSavingRatio
Los números de objeto y generaciones permanecen estables, de modo que solo cambian las cargas de flujo recomprimidas y sus valores /Length directos; cada referencia cruzada superviviente sigue siendo válida sin renumeración
La salida es una única revisión clásica con el trailer reconstruido llevando /Root, /Info y /ID hacia adelante
TPdfFlateRecompressOptions.MinSavingBytes y MinSavingRatio evitan recodificar flujos que no ahorrarían lo suficiente, dejando intactos los flujos ya óptimosTPdfFlateRecompressReport informa de los recuentos de flujos recodificados, omitidos y fallidos, más los totales de bytes originales y recodificados de los flujos/Length indirectas y los flujos que no se pueden decodificar se omiten o fallan sin corromper el documentoAllowSignedDocument is explicitly enabled because a full rewrite invalidates existing signature byte ranges
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');