function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;
| Stream | Приёмник полного документа, включая базовую линию и каждую добавленную до сих пор ревизию; nil возбуждает EPdfError |
| Info | TPdfIncrementalCommitInfo получает количества объектов и байтов, прежнее и новое смещения xref, число ревизий, состояние шифрования и проверки, а также результаты обеспечения долговечности файла |
| Result | True, когда полный проверенный вывод был записан |
function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;
| FileName | Целевой файл, атомарно замещаемый через долговечный вспомогательный файл в том же каталоге |
| Info | Тот же отчёт TPdfIncrementalCommitInfo, что и у потоковой перегрузки, с Durable и ReplacedAtomically, установленными после успеха этих файловых этапов |
| Result | True, когда проверенный вспомогательный файл заменил целевой |
Сравнивает живой документ с состоянием, зафиксированным при последней фиксации, или с базовой линией для первой из них, и добавляет изменённые объекты вместе со свежей секцией перекрёстных ссылок. Предыдущие байты никогда не перезаписываются, поэтому каждая прежняя ревизия остаётся побайтово идентичной и восстановимой
AppendedByteCount — размер только новой ревизии, тогда как PreviousOutputByteCount и OutputByteCount ограничивают неизменяемый префикс и полный результат. PreviousXrefOffset и OutputXrefOffset идентифицируют цепочку ревизий, а ChangedObjectCount сообщает, сколько объектов нашло сравнение
Каждый кандидат проходит разреженные проверки границ ревизий, строгое независимое повторное открытие, проверки числа страниц и обработчика безопасности, а при наличии — проверку PDF MAC. Encrypted и Validated сообщают эти свойства
Файловая перегрузка пишет рядом с целевым файлом, сбрасывает вспомогательный файл, закрывает и заново открывает его, повторяет проверку, затем фиксирует атомарную замену. Windows запрашивает замену со сквозной записью; Unix проверяет поддержку сброса каталога перед заменой и сбрасывает родительский каталог после переименования
Сбой до замены оставляет прежний целевой файл нетронутым и восстанавливает базовую линию сеанса и счётчик ревизий. Сбой сброса каталога Unix после успешного переименования возбуждает EPdfOutputCommitError из внутреннего модуля FPdfPlatform: вывод уже заменён, Info.ReplacedAtomically=True и Info.Durable=False, а сеанс сохраняет зафиксированную базовую линию, поэтому последующая правка не может дописать к устаревшему выводу
Durable сообщает об успешном завершении запрошенных платформой стадий сброса. Он не удостоверяет носитель или поведение файловой системы после потери питания. Другие API сохранения файлов, использующие ту же атомарную замену, также могут возбуждать это исключение зафиксированного вывода после замены; вызывающий код должен отличать эту стадию от сбоев, сохраняющих прежний вывод
Вызов без открытого сеанса возбуждает EPdfError, поэтому сначала должен идти BeginIncrementalSave