function SaveAsReproducible(Stream: TStream; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReproducible(const FileName: string; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
L’ordre des objets est déjà stable (numéro d’objet croissant), et la dérivation d’/ID par hachage de contenu est déterministe, donc le non-déterminisme restant est le /CreationDate et le /ModDate d’horloge murale que PDFium écrit dans /Info
StripDictionaryEntries supprime ces clés d’horodatage du corps /Info, et le trailer reconstruit omet l’/ID source (qui dérive d’octets horodatés)
Les objets inaccessibles sont aussi balayés exactement comme SaveAsReachable, et les numéros d’objet et générations restent stables
TPdfReproducibleReport rapporte les comptages d’objets conservés et élagués plus le nombre d’entrées d’horodatage suppriméesAllowSignedDocument est explicitement activé car une réécriture complète invalide les plages d’octets de signature existantes/ID ; les appelants qui ont besoin d’un identifiant stable peuvent en dériver un depuis les octets de sortie
Pdf.SaveAsReproducible('stable.pdf', Report);
WriteLn('stripped ', Report.StrippedTimestampCount, ' timestamps');