JSON-операции и колбэки удаления аннотаций

Точки входа операций Windows и нативного Linux C ABI принимают annotations.remove; JSON запроса выбирает аннотации, тогда как байты PDF идут через колбэк-IO, а не встраиваются в JSON

{
  "schemaVersion": 1,
  "type": "annotations.remove",
  "annotations": [{"page": 0, "name": "review-note"}],
  "annotationLimits": {
    "maxAnnotations": 4096,
    "maxOperations": 1000000,
    "maxNameBytes": 1048576,
    "maxWorkingBytes": 33554432
  }
}

annotations — это массив объектов с целым page внутри фактического входного документа и непустой строкой name; имена совпадают с декодированным Unicode NM точно

Пустой массив или несовпавшие валидные идентичности — это no-op; дублирующиеся селекторы, неоднозначные выбранные имена, malformed принадлежность аннотаций и выбор Widget дают сбой

Жизненный цикл входа и публикации

Без входного IO удаление работает над текущим зафиксированным документом хэндла; явный входной IO поставляет независимый PDF и готовится приватно, а не замещает текущий контекст до успеха операции

Указывайте password, когда аутентификация зашифрованного входа этого требует; фактическое разрешение на аннотации и политика подписанных документов продолжают применяться

Выходной IO PDF и IO результата — отдельные приёмники; движок готовит кандидата, публикует его PDF, публикует ограниченный JSON-результат, проверяет отмену и лишь затем замещает текущий документ хэндла

Сбой чтения, записи, публикации результата, политики, бюджета или отмены сохраняет предыдущий зафиксированный контекст и позволяет обычный повтор на этом хэндле

Колбэк-приёмник может уже содержать байты, когда более поздняя запись, колбэк результата или отмена дают сбой; откат контекста не может отозвать эти внешние байты, поэтому вызывающие должны готовить и публиковать свои приёмники транзакционно

Повторное удаление над зафиксированным результатом возвращает ноль и публикует точную текущую ревизию; сравнивайте колбэк-вывод только после проверки статуса операции

Результат и пределы

Успешный результат имеет schemaVersion: 1, statusCode: 0, status: "ok", removed, mediaType: "application/pdf" и annotationProfile: "page-and-nm-removal-v1"

removed включает каскады popup и ответов, считая каждую аннотацию один раз, даже когда зависимости образуют цикл

annotationLimits понижает эффективные положительные ёмкости, описанные в THPDFHeadlessAnnotationRemovalOptions; пределы памяти операции, объектов, страниц, вывода, результата и прошедшего времени остаются независимыми

Необязательный signaturePolicy настраивает существующую аутентифицированную политику CMS, включая требуемые CAdES, метки времени и требования доверия, поддерживаемые точкой входа операции

Фактические удаления подчиняются разрешениям аннотаций AES и аутентифицированной политике сертификации P1/P2/P3; успешная проверка пароля или неподписанное сообщение об ошибке не являются доказательством разрешения или доверенной сертификации

При сбое проверяйте возвращённый статус операции и доступный структурированный результат ошибки; неудавшийся приёмник результата может помешать доставке полного JSON-документа ошибки

См. семантику нативного удаления и обычные файловые задания Windows