# Скриншоты и визуальная проверка

> Сочетайте чтение данных, реальные изображения и проверки макета слайдов.

- Human documentation: [https://docs.univer.ai/ru-RU/overview/features/shared/visual-inspection](https://docs.univer.ai/ru-RU/overview/features/shared/visual-inspection)

- Agent Markdown: [https://docs.univer.ai/ru-RU/overview/features/shared/visual-inspection.md](https://docs.univer.ai/ru-RU/overview/features/shared/visual-inspection.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.3.0`

- Source: [features/shared/visual-inspection.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/docs/features/shared/visual-inspection.ru-RU.mdx)

---

Визуальная проверка превращает модели в изображения и доказательства раскладки. Agent проверяет данные и формулы, затем реально отрисованные текст, фигуры и страницы, исправляет их через Facade и проверяет новое состояние.

## Три вида доказательств

| Доказательство | Что проверяет |
| --- | --- |
| Структурированное чтение | Исходные значения, формулы и результаты, абзацы и свойства. |
| PNG | Видимое содержимое, обрезку, диаграммы, цвета и композицию. |
| Диагностика раскладки | Правила, ID, границы и позиции из отрисованной геометрии для точных исправлений. |

## Подготовка состояния и зависимостей

Screenshot и Layout Lint получают материализованные UnitData, не подключают удалённые цели и не интерпретируют changesets. Для совместного содержимого выполните `pull()`, дождитесь расчётов после изменения формул и вызовите `exportUnitData()`. В Worktree экспортируйте нужный черновик; приложение может записать target, revision и область рядом с отчётом.

Родительский Snapshot не содержит всех зависимостей. Передайте Sheet/Relational Table-источники в `formulaReferenceUnits`, дочерние Unit — в `embeddedUnits`. Render Page материализует их до родителя. UUID-изображения подготавливают через `resolveUnitScreenshotImageAssets()` и resolver приложения. Это best-effort-разрешение: проверяйте отсутствующие ресурсы.

## От содержимого к стабильному изображению

```mermaid
flowchart LR
A["Явное состояние<br/>UnitData + зависимости"]
B["Render Runtime<br/>Браузер и протокол"]
C["Render Page<br/>Раскладка Univer"]
D["Проверка готовности<br/>Расчёт и стабильный кадр"]
E["PNG / факты раскладки<br/>Agent и проверяющий"]
A --> B --> C --> D --> E
```

`univer-render-runtime` размещает собранную приложением Render Page и запускает браузер из Node.js. Плагины восстанавливают содержимое, обе стороны проверяют версию протокола. Операции идут в последовательную очередь Runtime, который можно использовать повторно; владелец в итоге вызывает `close()`.

Условия зависят от продукта. Фигуры с формулами ожидают выхода из pending и при необходимости стабильных пикселей нескольких кадров. Relational Table ожидает шрифты, расчёты, активные table/view и стабильную DOM/Canvas-раскладку. Выход из pending может означать ошибку: проверяйте значение и статус.

Текущая реализация хеширует сериализованные UnitData, источники формул и дочернее содержимое. При изменении данных меняется key сеанса даже с прежним Unit ID, исключая повторное использование старого изображения только по идентификатору.

## Выбор области по продукту

| Продукт | Область и результат |
| --- | --- |
| Sheet | Лист и явный диапазон A1 для PNG области; важные результаты выбирайте явно. |
| Doc | Выбор или перечисление страниц с отдельными PNG. |
| Slide | Номер от 1 либо page ID, дополнительный contact sheet. |
| Relational Table | Рабочая область активной таблицы/представления после открытия, DOM + Canvas. |
| Canvases | Полные границы либо взаимоисключающие region / elementIds, padding и геометрические доказательства. |

`unit-screenshot` возвращает bytes, размеры, идентификатор страницы/области и рекомендуемые имена; сохраняет приложение. Scale допускает 0.1–4, настраиваются `maxPages` и `maxPixels` на изображение. Двойной масштаб даёт примерно вчетверо больше пикселей, поэтому большие данные проверяют по областям. PDF не входит в этот интерфейс пяти продуктов.

## Общие данные для снимка и lint

Пример снимает и проверяет одни данные Slide и источники формул. `renderRuntime` уже создан, `slideData` — подготовленный снимок. Возможности сами не пишут файлы. Сборка страницы и закрытие ресурсов описаны в [визуальной проверке AI SDK](https://docs.univer.ai/ru-RU/ai/visual-inspection.md).

```ts
import { createUnitScreenshot } from '@univer-cli/unit-screenshot'
import { createUnitLayoutLint } from '@univer-cli/unit-layout-lint'

const source = {
  unitType: 'slide' as const,
  unitData: slideData,
  formulaReferenceUnits,
}
const screenshot = createUnitScreenshot({ runtime: renderRuntime })
const lint = createUnitLayoutLint({ runtime: renderRuntime })

const capture = await screenshot.capture({
  ...source,
  target: { kind: 'slide-pages', pages: [1], scale: 2 },
})
const report = await lint.lint({ ...source, pages: [1] })
```

## Slide: поиск проблем по границам глифов

Layout Lint использует факты браузера. `declared` — рамка модели, `ink` — реальные границы нарисованных глифов в координатах страницы с учётом раскладки, выравнивания и поворота. Рамка внутри страницы не гарантирует, что текст также помещается.

| Текущее правило | Основание |
| --- | --- |
| `text-off-page` | Реальная область текста выходит за страницу. |
| `text-escapes-container` | Текст явно выходит из найденного небольшого непрозрачного контейнера. |
| `text-overlaps-text` | Две реальные области текста существенно перекрываются. |

`coverage.pages` и `coverage.rules` описывают охват. Finding содержит `pageId`, `id`, `text.ink` и соответствующие `overflow`, `container`, `other`; стабильный `fingerprint` помогает сравнивать исправления. Сейчас все findings — warnings для проверки вместе со снимками. Пустой список означает лишь отсутствие срабатываний выбранных правил в выбранной области.

## Canvases: проверка отрисованных соединителей

Снимки Canvases дополнительно возвращают `layoutAnalysis`: routes, issues и summary, разрешённые браузером. Это отдельный интерфейс от `unit-layout-lint`, поддерживающего только Slide. Автоматические пути могут быть не разрешены в модели; проверяйте итог с `source: 'rendered'`.

Диагностика находит пересечения элементов, линий, стрелок и подписей с `connectorIds`, `elementIds`, `focusBounds`. Исправьте нужные объекты, снимите region или elementIds, затем проверьте весь холст. Так визуальная проблема связывается с конкретной правкой Facade.

## Передача доказательств

```mermaid
flowchart LR
A["Правка Facade"]
B["Чтение значений и формул"]
C["Снимок + диагностика"]
D["Исправление по ID"]
E["Проверка нового состояния"]
F["Ревью / передача"]
A --> B --> C --> D --> E --> F
D --> B
```

Храните результаты, область, страницы, снимки и диагностику вместе. Снимок не доказывает верность формул, а lint не заменяет визуальную оценку. Панели, фокус и всплывающие меню проверяйте в Web-редакторе; убедитесь, что зависимости между Unit загружены.

Завершите проверку до Ready в [Worktree](https://docs.univer.ai/ru-RU/overview/features/shared/worktree.md). См. [исполнение без интерфейса и серверные вычисления](https://docs.univer.ai/ru-RU/overview/features/shared/server-calculation.md) и [Agent и автоматизация](https://docs.univer.ai/ru-RU/overview/features/shared/agents.md).

[К списку возможностей](https://docs.univer.ai/ru-RU/overview/features.md)
