function SaveAsReproducible(Stream: TStream; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReproducible(const FileName: string; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
El orden de los objetos ya es estable (número de objeto ascendente) y la derivación del /ID por hash de contenido es determinista, por lo que el no determinismo restante está en el /CreationDate y el /ModDate de reloj de pared que PDFium escribe en /Info
StripDictionaryEntries elimina esas claves de marca de tiempo del cuerpo de /Info, y el trailer reconstruido omite el /ID de origen (que deriva de bytes con marca de tiempo)
También se barren los objetos inalcanzables exactamente como en SaveAsReachable, y los números y generaciones de objeto permanecen estables
TPdfReproducibleReport informa los conteos de objetos conservados y podados más la cantidad de entradas de marca de tiempo eliminadasAllowSignedDocument se habilite de forma explícita, porque una reescritura completa invalida los rangos de bytes de las firmas existentes/ID por completo; los llamadores que necesiten un identificador estable pueden derivarlo de los bytes de salida
Pdf.SaveAsReproducible('stable.pdf', Report);
WriteLn('stripped ', Report.StrippedTimestampCount, ' timestamps');