Замечания
Замечания (аннотации) создаются к документам XPS и PDF. Страницы нумеруются с 0.
Формат: Markup и legacy
| Формат | Для чего | Как выбрать |
|---|---|---|
| Markup (по умолчанию) | Клиент Pilot 26.20+; в объекте замечания пишутся атрибуты markups и markups_version |
format=markup или параметр не указан |
| legacy | Серверы и клиенты старше 26.20; атрибут annotation |
format=legacy (AnnotateText, CreateAnnotation) |
В legacy-формате новые фигуры и параметры недоступны: только rectangle, ellipse, triangle, arrow, point, без strokeWidth, points, cloud, startEnding, endEnding, а style в AnnotateText только highlight. Запрещённая комбинация возвращается ошибкой.
CreateMarkupAnnotation работает только с Markup.
Инструменты
| Инструмент | Что делает |
|---|---|
AnnotateText |
Находит слово или фразу в тексте документа и выделяет её |
CreateAnnotation |
Одна графическая фигура |
CreateMarkupAnnotation |
Одно замечание из нескольких фигур (Markup) |
GetAnnotations |
Читает замечания документа |
BuildAnnotationXml |
XML legacy-разметки без создания объекта |
Координаты
Координаты и размеры фигур передаются в пикселях изображения, полученного от GetDocumentPageImage, с началом в левом верхнем углу. Параметр dpi у инструментов замечаний должен совпадать с фактическим dpi изображения (по умолчанию 150). Размеры страниц берутся из того же файла документа (XPS, иначе PDF).
GetDocumentPageImage принимает dpi от 36 до 300; если длинная сторона получается больше 2000 px, dpi снижается автоматически. Фактический dpi указан в ответе, его нужно передавать в CreateAnnotation, CreateMarkupAnnotation и GetAnnotations.
Рекомендуемая последовательность:
GetDocumentPageImage(documentId, page, dpi)и запомнить фактическийdpi.- По изображению определить пиксельные координаты.
CreateAnnotationилиCreateMarkupAnnotationс теми жеpageиdpi.GetAnnotations(documentId, dpi)для проверки.
Фигуры и параметры
Допустимые значения shape: rectangle, ellipse, triangle, arrow, line, polyline, polygon, ink, point.
| Фигура | Смысл x, y, width, height |
|---|---|
rectangle |
x, y — левый верхний угол; width, height — размеры |
ellipse |
x, y — центр; width, height — полные диаметры |
triangle |
в рамке x, y, width, height: основание по нижней стороне, вершина посередине сверху |
arrow, line |
x, y — острие (конец линии); хвост в точке x + width, y + height |
polyline, polygon, ink |
вершины в points: x1,y1;x2,y2;... (минимум 2, 3 и 2 вершины соответственно) |
point |
x, y — левый верхний угол стикера размером 24x24 |
Дополнительные параметры Markup:
color:red,green,blue,yellow,pink,blackили#RRGGBB;strokeWidth: толщина линии в DIP, больше 0 (по умолчанию 2);cloud: облачная граница, только дляpolylineиpolygon;startEnding,endEnding: окончания линииnoneилиopenarrow, только дляarrowиline; уarrowпо умолчаниюopenarrowна острие.
Для rectangle, ellipse и triangle width и height должны быть больше 0. Стиль AnnotateText в Markup: highlight (по умолчанию), underline, strikeout.
Если content у CreateAnnotation похож на исправление ошибки в тексте (есть слова «ошибк», «опечатк», «должно быть» или «орфограф» и слово в кавычках либо пара «слово -> исправление»), вызов перенаправляется в AnnotateText по найденному слову. Графическую фигуру в этом случае не ждите: используйте для неё content без таких формулировок.
Пример shapesJson
Одно замечание из прямоугольника и стрелки:
[
{"shape": "rectangle", "x": 150, "y": 150, "width": 200, "height": 100, "color": "blue"},
{"shape": "arrow", "x": 150, "y": 150, "width": 80, "height": 60}
]
Поля такие же, как у CreateAnnotation: shape, x, y, width, height, page, color, strokeWidth, points, cloud, startEnding, endEnding. Неизвестные поля и null вместо фигуры дают ошибку; массив должен быть непустым.
Чтение: GetAnnotations
GetAnnotations(documentId, dpi) возвращает JSON-массив замечаний: ID, тип, текст, автор, дата создания, версия файла, формат (markup или legacy) и фигуры (вид, страница, ограничивающий прямоугольник x, y, width, height в пикселях при заданном dpi, стиль). Замечания из корзины пропускаются; нечитаемое замечание выводится с полем error. Для Markup читается версия, совпадающая с текущей версией файла, иначе последняя.
Чего нет и почему
Эти возможности намеренно не предлагаются, потому что клиент Pilot 26.20 их не поддерживает:
- Текст на странице (freetext). Не создаётся: на этом виде замечаний падает клиент 26.20. Для текстовых пометок используйте
AnnotateText(замечание к тексту) иpoint(стикер). - Волнистая линия (squiggly). Список замечаний клиента 26.20 падает на таком замечании с ошибкой
Unknown MarkupSubtype: Squiggly. Интерфейс клиента сам создаёт только выделение, подчёркивание и зачёркивание. - Окончания линий, кроме
noneиopenarrow. Клиент отрисовывает только эти два. - Заливка и стиль линии. Клиент их не рисует, поэтому фон у фигур не задаётся, а линия всегда сплошная.