# ページと要素

> PDF ページ、ネイティブソースコンテンツ、編集可能なオーバーレイ、座標系について説明します。

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

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

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.2.0`

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

---

## ドキュメント構造

`IPdfDocument` には、正規化された PDF ドキュメントモデルが含まれます。

* `pages` は、ページの順序、サイズ、回転、レイヤー、ラベル、ネイティブ PDF ボックスを保存します。
* `objects` は、セマンティックなドキュメントオブジェクトを保存します。
* `displayLists` は、レンダリングレベルの PDF 操作とソースの忠実度を保持します。
* `textStories` は、編集可能なテキストフローを不安定な PDF グリフのグループ化から独立させます。
* `assets`、`styles`、`native` は、再利用可能なリソースとソース固有のリソースを保持します。
* `sources`、`edits`、`exportPlan` は、来歴とエクスポート意図を記録します。

インポートした PDF では、表示されるすべてのソース操作が編集可能な Facade 要素になるわけではありません。ネイティブコンテンツは、ユーザー操作によって昇格または置換されるまで表示リスト内に維持できます。

## ページ

`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 ボックスを継承します。隣接ページがない場合は、595 × 842 ポイントの A4 サイズが使用されます。

## ネイティブコンテンツと編集可能なオーバーレイ

`FPdfPage.getElements()` は、永続化された編集可能なオーバーレイを重なり順で返します。型指定されたアクセサーは、同じオーバーレイレイヤーを絞り込みます。

| アクセサー              | Facade ラッパー      |
| ------------------ | ---------------- |
| `getTextBoxes()`   | `FPdfTextBox`    |
| `getParagraphs()`  | `FPdfParagraph`  |
| `getLists()`       | `FPdfList`       |
| `getTables()`      | `FPdfTable`      |
| `getImages()`      | `FPdfImage`      |
| `getDividers()`    | `FPdfDivider`    |
| `getAnnotations()` | `FPdfAnnotation` |

`getTextSpans()` は異なり、表示されているネイティブテキスト操作のスナップショットを列挙します。テキスト範囲で `replaceText()` を呼び出すと、ネイティブ操作が抑制され、新しい編集可能なテキストボックスが作成されます。

## 座標系

コアモデルと公開 Facade は、意図的に異なる単位を使用します。

| 境界                                 | 単位と原点             |
| ---------------------------------- | ----------------- |
| Facade の位置、サイズ、注釈パス、線幅             | PDF ポイント、左上を基準に配置 |
| コアモデルのページとオブジェクトのジオメトリ             | EMU、左上原点          |
| インポートした `pdfBoxes` とネイティブソースのマッピング | PDF ユーザー空間、左下原点   |

アプリケーションコードでは、`getTransform`、`setPosition`、`setSize`、`setRotation`、型指定された Facade の挿入オプションを使用してください。`ptToEmu`、`emuToPt`、関連する変換ヘルパーは、より低レベルのモデルデータを構築する場合にのみ使用してください。

## 公開編集 API の制限

Facade は、複数のモデル制約を検証します。

* 幅と高さは有限の正の値である必要があります。位置と回転は有限の値である必要があります。
* リストレベルの範囲は `0` から `8` です。番号付きリストの開始番号は正の整数である必要があります。
* テーブルの各次元は正の整数で、セル数は 10,000 以下である必要があります。
* Facade から挿入できる注釈は、ハイライト、下線、取り消し線、波線、インク注釈です。
* 画像の不透明度の範囲は `0` から `1` で、切り抜き矩形は正の面積を持つ必要があります。
* テキスト範囲には、開始位置を含み終了位置を含まない UTF-16 オフセットを使用します。

タスク別の例については、[PDF の編集](https://docs.univer.ai/ja-JP/guides/pdfs/features/core/editing.md)を参照してください。
