FlateDecode elegíveis com compressão máxima, substituindo um stream somente quando a economia de bytes medida supera um limite definido pelo chamadorfunction 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;
O PDFium primeiro grava uma cópia não incremental do documento atual em memória; em seguida o wrapper executa uma varredura de alcançabilidade em todo o documento exatamente como SaveAsReachable
Cada stream FlateDecode alcançável é decodificado com PdfInflate e recodificado com DeflateCompress em compressão máxima; somente streams cuja economia medida supera MinSavingBytes e MinSavingRatio são substituídos
Os números e gerações de objeto permanecem estáveis, portanto apenas as cargas de stream recomprimidas e seus valores diretos de /Length mudam; toda cross-reference sobrevivente continua válida sem renumeração
A saída é uma única revisão clássica com o trailer reconstruído carregando /Root, /Info e /ID para frente
TPdfFlateRecompressOptions.MinSavingBytes e MinSavingRatio evitam recodificar streams que não economizariam o suficiente, deixando streams já ótimos intocadosTPdfFlateRecompressReport relata contagens de streams recomprimidos, ignorados e com falha, além dos totais de bytes dos streams originais e recomprimidos/Length indiretas e streams que falham ao decodificar são ignorados ou marcados como falha sem corromper o documentoAllowSignedDocument seja habilitado explicitamente, porque uma regravação completa invalida os intervalos de bytes das assinaturas existentes
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');