FlateDecode-Streams mit maximaler Kompression um, wobei ein Stream nur ersetzt wird, wenn die gemessene Byte-Einsparung eine Aufrufer-Schwelle überschreitet.function 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 schreibt zunächst eine nicht-inkrementelle Kopie des aktuellen In-Memory-Dokuments, dann führt der Wrapper einen dokumentweiten Erreichbarkeits-Durchlauf durch, genau wie SaveAsReachable
Jeder erreichbare FlateDecode-Stream wird mit PdfInflate dekodiert und mit DeflateCompress bei maximaler Kompression neu kodiert; nur Streams, deren gemessene Einsparung sowohl MinSavingBytes als auch MinSavingRatio übertrifft, werden ersetzt
Objektnummern und Generationen bleiben stabil, daher ändern sich nur die neu komprimierten Stream-Nutzlasten und ihre direkten /Length-Werte; jeder überlebende Querverweis bleibt ohne Neunummerierung gültig
Die Ausgabe ist eine einzelne klassische Revision, deren neu aufgebauter Trailer /Root, /Info und /ID fortführt
TPdfFlateRecompressOptions.MinSavingBytes und MinSavingRatio verhindern das Neukodieren von Streams, die nicht genug einsparen würden, und lassen bereits optimale Streams unberührtTPdfFlateRecompressReport meldet neu komprimierte, übersprungene und fehlgeschlagene Stream-Zahlen sowie die Byte-Gesamtsummen der ursprünglichen und neu komprimierten Streams/Length-Einträge und Streams, die nicht dekodiert werden können, werden übersprungen oder als fehlgeschlagen markiert, ohne das Dokument zu beschädigenAllowSignedDocument nicht ausdrücklich aktiviert ist, weil eine vollständige Neuschreibung vorhandene Signatur-Bytebereiche ungültig macht
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');