FlateDecode-strömmar vid maximal komprimering, där en ström ersätts endast när den uppmätta bytebesparingen överskrider en tröskel från anroparenfunction 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 skriver först en icke-inkrementell kopia av det aktuella dokumentet i minnet, därefter gör wrappern en nåbarhetsgenomgång av hela dokumentet, precis som SaveAsReachable
Varje nåbar FlateDecode-ström dekodas med PdfInflate och omkodas med DeflateCompress vid maximal komprimering; endast strömmar vars uppmätta besparing överskrider både MinSavingBytes och MinSavingRatio ersätts
Objektnummer och generationer förblir stabila, så endast de omkomprimerade strömpayloaderna och deras direkta /Length-värden ändras; varje överlevande korsreferens förblir giltig utan omnumrering
Utmatningen är en enda klassisk revision där den ombyggda trailern för /Root, /Info och /ID vidare
TPdfFlateRecompressOptions.MinSavingBytes och MinSavingRatio hindrar omkodning av strömmar som inte skulle spara tillräckligt, vilket lämnar redan optimala strömmar orördaTPdfFlateRecompressReport rapporterar antal omkomprimerade, överhoppade och misslyckade strömmar samt de ursprungliga och omkomprimerade bytetotalerna per ström/Length-poster och strömmar som inte kan avkodas hoppas över eller misslyckas utan att skada dokumentetAllowSignedDocument uttryckligen aktiveras, eftersom en fullständig omskrivning ogiltigförklarar befintliga signaturbyteintervall
Options.MinSavingBytes:= 64;
Options.MinSavingRatio:= 0.1;
Pdf.SaveAsFlateRecompressed('recompressed.pdf', Options, Report);
WriteLn('recompressed ', Report.RecompressedCount, ' streams');