/Info трейлераfunction SaveAsReachable(Stream: TStream; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
function SaveAsReachable(const FileName: string; out Report: TPdfPruneReport; AllowSignedDocument: Boolean = False): Boolean;
PDFium сначала записывает неинкрементальную копию текущего документа в памяти, чтобы перезапись начиналась с канонических байтов
Затем граф объектов разбирается, и обход достижимости по всему документу от каталога собирает каждый выживший косвенный объект, включая дерево страниц, ресурсы страниц, шрифты, изображения, форм XObjects, AcroForm, дерево структуры, закладки, деревья имён, optional content, метаданные, output intents и связанные файлы
Объекты, ставшие недостижимыми из-за инкрементальных обновлений, слияний страниц или восстановленных сохранений, отбрасываются, а результат - одна классическая ревизия без объектных потоков и без потока перекрёстных ссылок
Номера объектов и поколения сохраняются, поэтому каждая выжившая перекрёстная ссылка остаётся действительной без перенумерации; недостижимые объекты становятся свободными записями в перестроенной классической таблице перекрёстных ссылок
Перестроенный трейлер переносит /Root, /Info и /ID только тогда, когда объекты, на которые они ссылаются, пережили очистку
TPdfPruneReport сообщает количества сохранённых и удалённых косвенных объектов, байтовые размеры источника и результата и структурированное сообщение о сбоеAllowSignedDocument, поскольку полная перезапись аннулирует существующие байтовые диапазоны подписей
Pdf.SaveAsReachable('pruned.pdf', Report);
WriteLn('Kept ', Report.KeptObjectCount, ' pruned ', Report.PrunedObjectCount);