# 页面与元素

> 创建 PDF 页面、枚举可编辑元素，并控制元素几何与层叠顺序。

- Human documentation: [https://docs.univer.ai/zh-CN/guides/pdfs/features/core/pages-and-elements](https://docs.univer.ai/zh-CN/guides/pdfs/features/core/pages-and-elements)

- Agent Markdown: [https://docs.univer.ai/zh-CN/guides/pdfs/features/core/pages-and-elements.md](https://docs.univer.ai/zh-CN/guides/pdfs/features/core/pages-and-elements.md)

- Requested language: `zh-CN`

- Content language: `zh-CN`

- Documentation version: `1.0.0-rc.0`

- Source: [pdfs/features/core/pages-and-elements.zh-CN.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/pdfs/features/core/pages-and-elements.zh-CN.mdx)

---

`FPdf` 拥有页面；每个 `FPdfPage` 提供放置在该页上的持久化可编辑叠加层。

## 读取与插入页面

页面索引从 0 开始。`insertPage(index?)` 可在指定索引插入页面；省略索引时追加页面。空文档使用 A4 尺寸。

```ts
const pdf = univerAPI.getActivePdf()

if (!pdf) {
  throw new Error('No active PDF')
}

const page = pdf.getPageByIndex(0) ?? pdf.insertPage()
const pages = pdf.getPages()
const samePage = pdf.getPageById(page.getId())
```

## 枚举可编辑元素

`getElements()` 按 z 顺序返回可编辑叠加层，不包含导入 PDF 中的原生对象。

```ts
const elements = page.getElements()
const [firstElement] = elements
const sameElement = firstElement ? page.getElementById(firstElement.getId()) : null
```

需要专用包装器时，请使用类型化 getter：`getTextBoxes()`、`getParagraphs()`、`getLists()`、`getTables()`、`getImages()`、`getDividers()` 和 `getAnnotations()`。

## 变换与移除元素

Facade 放置值使用 PDF 点。`getData()` 返回的快照几何使用核心 PDF 单位，因此应通过 Facade 方法更新放置。

```ts
const [element] = page.getElements()

if (element) {
  element
    .setPosition(36, 72)
    .setSize(288, 144)
    .setRotation(5)
    .setVisible(true)
    .setLocked(false)
    .bringToFront()
}
```

使用 `remove()` 删除可编辑元素。删除后请勿复用已失效的包装器。
