Нативный обмен аннотациями XFDF
HPDFHeadlessXFDF экспортирует отображённые аннотации из загруженного нативного PDF-графа и готовит импорт XFDF-аннотаций как независимую инкрементальную ревизию
Используйте HPDFExportHeadlessAnnotationsXFDF для XML-байтов UTF-8 и SaveAnnotationsXFDFToFile для добавления аннотаций к существующему документу, не меняя загруженный исходный граф
Отображённый профиль аннотаций
Профиль отображает Text, FreeText, Line, Square, Circle, Polygon, PolyLine, Highlight, Underline, StrikeOut, Squiggly, Stamp, Ink, Caret, FileAttachment, Sound, Redact и Link
Общие значения включают страницу, прямоугольник, Unicode-содержимое, автора, имя аннотации, даты, тему, флаги, прозрачность, цвета и поддерживаемые свойства границ
Значения, специфичные для типов, включают координаты четырёхугольников, вершины, росчерки Ink, окончания линий и геометрию выносок, свойства intent/callout/fringe/текста по умолчанию у FreeText, состояние повтора Redact, действия URI или Named для ссылок и именованные либо явные локальные destinations и действия GoTo
Пустые массивы компонентов цвета сохраняют прозрачные цвета; исходные цвета Gray и CMYK отображаются в RGB-значения XFDF, а компоненты RGB квантуются в шестизначное шестнадцатеричное представление формата
FileAttachment при экспорте предпочитает Unicode-имя файла и сохраняет метаданные внешнего файла, даже когда встроенного потока нет; данные встроенных файлов и звуков декодируются в ограниченный канонический base64 и импортируются как реальные косвенные потоки, включая пустые
Popup-аннотации представлены вложенными элементами popup и импортируются с косвенными связями Parent, Popup и страницы; ответы разрешаются вторым проходом по существующим и только что добавленным именам аннотаций, включая прямые ссылки вперёд
Rich-содержимое сохраняет пространство имён XHTML, упорядоченный смешанный текст и унаследованные привязки пространств имён
Транзакции и права
Импорты добавляют аннотации и отклоняют дублирующиеся имена, неоднозначные или отсутствующие цели ответов и недопустимые отображённые значения до публикации
Неудавшийся или отменённый импорт сохраняет целевой файл и загруженный исходный граф; успешный импорт также оставляет загруженный источник без изменений, поэтому загрузите сохранённый файл, чтобы принять его новую ревизию
Экспорту нужно право на извлечение, импорту — право на изменение аннотаций; защита AES-256 R5/R6 остаётся в сохранённой ревизии
Фактическая политика сертификации аутентифицируется через нативный workflow подписей: P1 и P2 запрещают изменения аннотаций, тогда как P3 допускает ревизию аннотаций, сохраняющую исходные подписанные байты
Границы
THPDFHeadlessXFDFOptions ограничивает входные и выходные байты, число аннотаций, узлы графа и XML, глубину и рабочую память с кооперативной отменой
Отображённые числа обязаны быть конечными и по модулю не больше миллиона, с дополнительными ограничениями на число координат, прозрачность, размеры сэмплов и другие типизированные значения
Допуск XML для всего документа проверяет кодировку, пространства имён, дублирующиеся атрибуты, сущности и полную структуру до отображения аннотаций; обработка DTD и внешних сущностей отключена
Границы операций
Профиль не переносит произвольные AP-потоки внешнего вида, пользовательские словари аннотаций, замену и удаление аннотаций, удалённые destinations, произвольные действия или данные аннотаций FDF
Синтез и отрисовка внешнего вида аннотаций — отдельные операции; импорт геометрических и текстовых свойств не создаёт AP-поток
Прочие исходные подтипы аннотаций пропускаются при экспорте и учитываются в результате; некорректные выбранные отображённые значения ломают операцию без частично возвращённого XML
Нативный Pascal-API работает в Windows и Linux; версионированный Linux C ABI также раскрывает JSON-операции аннотаций через колбэки, а Windows-задачи и V1-колбэки — тот же отображённый обмен аннотациями
Нативный Pascal API работает в Windows и Linux; версионированный Linux C ABI также открывает колбэк-операции JSON аннотаций, а файловые задания Windows и колбэки V1 открывают тот же отображаемый обмен аннотациями
Явное удаление аннотаций
Удаление аннотаций по странице и имени — отдельная операция; пропуск аннотации в импортируемом FDF или XFDF не удаляет её
Удаление дерева полей Widget и безопасное стирание требуют отдельных операций; инкрементальное удаление сохраняет предыдущие байты PDF