# Страницы и элементы

> Узнайте о страницах PDF, нативном исходном содержимом, редактируемых наложениях и системах координат.

- Human documentation: [https://docs.univer.ai/ru-RU/guides/pdfs/model/pages-and-elements](https://docs.univer.ai/ru-RU/guides/pdfs/model/pages-and-elements)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/pdfs/model/pages-and-elements.md](https://docs.univer.ai/ru-RU/guides/pdfs/model/pages-and-elements.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [pdfs/model/pages-and-elements.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/pdfs/model/pages-and-elements.ru-RU.mdx)

---

## Структура документа

`IPdfDocument` содержит нормализованную модель документа PDF:

* `pages` хранит порядок, размеры, поворот, слои, метки и нативные поля PDF для страниц.
* `objects` хранит семантические объекты документа.
* `displayLists` сохраняет операции PDF на уровне отрисовки и точность исходного документа.
* `textStories` хранит редактируемый поток текста независимо от нестабильной группировки глифов PDF.
* `assets`, `styles` и `native` сохраняют повторно используемые и относящиеся к источнику ресурсы.
* `sources`, `edits` и `exportPlan` записывают происхождение и замысел экспорта.

В импортированном PDF не каждая видимая исходная операция становится редактируемым элементом фасада. Нативное содержимое может оставаться в списках отображения, пока действие пользователя не повысит или не заменит его.

## Страницы

`FPdf` читает страницы в материализованном порядке и вставляет пустые страницы:

```ts
const pages = pdf.getPages()
const firstPage = pdf.getPageByIndex(0)
const pageById = firstPage ? pdf.getPageById(firstPage.getId()) : null
const appendedPage = pdf.insertPage()
```

`insertPage(index)` принимает целое число от `0` до текущего количества страниц. Новая страница наследует размер, поворот и поля PDF соседней страницы. Если соседней страницы нет, используются размеры A4: 595 на 842 пункта.

## Нативное содержимое и редактируемые наложения

`FPdfPage.getElements()` возвращает сохраняемые редактируемые наложения в z-порядке. Типизированные методы доступа фильтруют тот же слой наложений:

| Метод доступа      | Обёртка фасада   |
| ------------------ | ---------------- |
| `getTextBoxes()`   | `FPdfTextBox`    |
| `getParagraphs()`  | `FPdfParagraph`  |
| `getLists()`       | `FPdfList`       |
| `getTables()`      | `FPdfTable`      |
| `getImages()`      | `FPdfImage`      |
| `getDividers()`    | `FPdfDivider`    |
| `getAnnotations()` | `FPdfAnnotation` |

`getTextSpans()` работает иначе: он перечисляет снимки видимых операций нативного текста. Вызов `replaceText()` для диапазона скрывает нативную операцию и создаёт новое редактируемое текстовое поле.

## Системы координат

Основная модель и публичный фасад намеренно используют разные единицы:

| Граница                                                          | Единицы и начало координат                                              |
| ---------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Позиции и размеры фасада, пути аннотаций и ширина штрихов        | Пункты PDF, размещение от верхнего левого угла                          |
| Геометрия страниц и объектов основной модели                     | EMU, начало координат в верхнем левом углу                              |
| Импортированные `pdfBoxes` и сопоставления с нативным источником | Пользовательское пространство PDF, начало координат в нижнем левом углу |

В коде приложения используйте `getTransform`, `setPosition`, `setSize`, `setRotation` и типизированные параметры вставки фасада. Применяйте `ptToEmu`, `emuToPt` и связанные средства преобразования, только когда создаёте данные модели более низкого уровня.

## Публичные ограничения редактирования

Фасад проверяет несколько ограничений модели:

* Ширина и высота должны быть положительными конечными значениями, а позиции и повороты — конечными.
* Уровни списка находятся в диапазоне от `0` до `8`; начальный номер упорядоченного списка должен быть положительным целым числом.
* Размеры таблицы должны быть положительными целыми числами, а количество ячеек не должно превышать 10,000.
* Вставка аннотаций через фасад поддерживает выделение цветом, подчёркивание, зачёркивание, волнистое подчёркивание и рисование от руки.
* Непрозрачность изображения находится в диапазоне от `0` до `1`, а прямоугольник обрезки должен иметь положительную площадь.
* Диапазоны текста используют смещения UTF-16 с включённым началом и исключённым концом.

Примеры для конкретных задач см. в разделе [Редактирование PDF](https://docs.univer.ai/ru-RU/guides/pdfs/features/core/editing.md).
