# Текст и списки

> Вставляйте и редактируйте текстовые поля, блоки абзацев и семантические списки PDF.

- Human documentation: [https://docs.univer.ai/ru-RU/guides/pdfs/features/core/text-and-lists](https://docs.univer.ai/ru-RU/guides/pdfs/features/core/text-and-lists)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/pdfs/features/core/text-and-lists.md](https://docs.univer.ai/ru-RU/guides/pdfs/features/core/text-and-lists.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [pdfs/features/core/text-and-lists.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/pdfs/features/core/text-and-lists.ru-RU.mdx)

---

Текст PDF может быть простым редактируемым полем, рамкой абзаца на основе истории или семантическим списком.

## Текстовые поля

```ts
const textBox = page.insertTextBox({
  text: 'Quarterly review',
  left: 36,
  top: 36,
  width: 280,
  height: 48,
  fontSize: 20,
})

textBox.setTextStyle({ bold: true, fill: '#1d4ed8' })
textBox.setTextStyle({ italic: true }, { start: 0, end: 9 })
```

`setTextStyle(style, range?)` применяет стиль ко всему полю или диапазону UTF-16 с включённым началом и исключённым концом.

## Абзацы

Блоки абзацев имеют стабильные идентификаторы. Получите их через `getBlocks()` перед изменением текста, стиля или порядка.

```ts
const paragraph = page.insertParagraph({
  text: 'Release summary',
  left: 36,
  top: 108,
  width: 280,
  height: 96,
})

paragraph.appendBlock({
  text: 'Approved for publication',
  textStyle: { italic: true },
})

const [block] = paragraph.getBlocks()

if (block) {
  paragraph.setBlockStyle(block.id, { align: 'center' })
}
```

## Семантические списки

```ts
const list = page.insertList({
  text: 'Verify content',
  kind: univerAPI.Enum.PdfListKind.ORDERED,
  preset: univerAPI.Enum.PdfListPresetId.ORDERED_NUMBER_ALPHA,
  left: 36,
  top: 228,
  width: 280,
  height: 120,
})

list.insertItem(1, { text: 'Export final PDF' })
list.insertItem(2, { text: 'Archive source', level: 1 })
list.setStartNumber(3)
```

Уровни списка находятся в диапазоне от `0` до `8`. Для повышения уровня нужен предыдущий элемент, способный стать родителем; `setStartNumber()` доступен только для упорядоченных списков.

Текстовые поля также предоставляют `getTextRuns()`, `getTextAnchor()` и `setTextAnchor()`. Абзацы предоставляют `insertBlock()`, `appendBlock()`, `setBlockText()`, `setBlockStyle()` и `removeBlock()`.
