function SaveAsReproducible(Stream: TStream; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReproducible(const FileName: string; out Report: TPdfReproducibleReport; AllowSignedDocument: Boolean = False): Boolean;
A ordem dos objetos já é estável (número de objeto ascendente) e a derivação do /ID por hash de conteúdo é determinística, portanto a não determinismo restante está no /CreationDate e /ModDate de relógio de parede que o PDFium grava em /Info
StripDictionaryEntries remove essas chaves de timestamp do corpo de /Info, e o trailer reconstruído omite o /ID de origem (que deriva de bytes com marca de tempo)
Objetos inalcançáveis também são varridos exatamente como em SaveAsReachable, e os números e gerações de objeto permanecem estáveis
TPdfReproducibleReport relata contagens de objetos mantidos e podados, além do número de entradas de timestamp removidasAllowSignedDocument seja habilitado explicitamente, porque uma regravação completa invalida os intervalos de bytes das assinaturas existentes/ID inteiramente; chamadores que precisam de um identificador estável podem derivar um dos bytes de saída
Pdf.SaveAsReproducible('stable.pdf', Report);
WriteLn('stripped ', Report.StrippedTimestampCount, ' timestamps');