FlateDecode idonei alla massima compressione, sostituendo un flusso solo quando il risparmio di byte misurato supera una soglia del chiamantefunction 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 scrive prima una copia non incrementale del documento corrente in memoria, poi il wrapper esegue una camminata di raggiungibilità a livello di documento esattamente come SaveAsReachable
Ogni flusso FlateDecode raggiungibile viene decodificato con PdfInflate e ri-codificato con DeflateCompress alla massima compressione; solo i flussi il cui risparmio misurato supera sia MinSavingBytes sia MinSavingRatio vengono sostituiti
I numeri e le generazioni degli oggetti restano stabili, così cambiano solo i payload dei flussi ricompressi e i loro valori /Length diretti; ogni riferimento incrociato sopravvissuto resta valido senza rinumerazione
L'output è una singola revisione classica con il trailer ricostruito che trasporta in avanti /Root, /Info e /ID
TPdfFlateRecompressOptions.MinSavingBytes e MinSavingRatio impediscono di ri-codificare flussi che non risparmierebbero abbastanza, lasciando intatti i flussi già ottimaliTPdfFlateRecompressReport riporta i conteggi di flussi ricompressi, saltati e falliti più i totali in byte dei flussi originali e ricompressi/Length indirette e i flussi che falliscono la decodifica vengono saltati o falliti senza corrompere il documentoAllowSignedDocument non sia esplicitamente abilitato perché una riscrittura completa invalida gli intervalli di byte delle firme esistenti
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');