FlateDecode elegíveis com compressão máxima, substituindo um stream apenas quando a poupança medida em bytes ultrapassa um limiar 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 escreve primeiro uma cópia não incremental do documento atual em memória; de seguida, o wrapper efetua uma travessia de alcançabilidade a todo o documento exatamente como SaveAsReachable
Cada stream FlateDecode alcançável é descodificado com PdfInflate e reencodado com DeflateCompress à compressão máxima; só os streams cuja poupança medida ultrapassa simultaneamente MinSavingBytes e MinSavingRatio são substituídos
Os números e gerações de objeto mantêm-se estáveis, pelo que só as cargas de stream recomprimidas e os respetivos valores diretos de /Length mudam; cada cross-reference sobrevivente continua válida sem renumeração
A saída é uma única revisão clássica com o trailer reconstruído a transportar /Root, /Info e /ID
TPdfFlateRecompressOptions.MinSavingBytes e MinSavingRatio impedem a reencodagem de streams que não poupariam o suficiente, deixando intactos os streams já ótimosTPdfFlateRecompressReport reporta contagens de streams recomprimidos, ignorados e falhados, mais os totais em bytes dos streams originais e recomprimidos/Length indiretas e streams que falham a descodificação são ignorados ou marcados como falhados sem corromper o documentoAllowSignedDocument estiver explicitamente ativado, porque uma reescrita 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');