# 문서 본문 구조

- Human documentation: [https://docs.univer.ai/ko-KR/guides/docs/model/document-body](https://docs.univer.ai/ko-KR/guides/docs/model/document-body)

- Agent Markdown: [https://docs.univer.ai/ko-KR/guides/docs/model/document-body.md](https://docs.univer.ai/ko-KR/guides/docs/model/document-body.md)

- Requested language: `ko-KR`

- Content language: `ko-KR`

- Documentation version: `1.0.4`

- Source: [docs/model/document-body.ko-KR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/docs/model/document-body.ko-KR.mdx)

---

## IDocumentBody

`IDocumentBody`는 Univer Docs 문서의 기본 흐름 콘텐츠를 저장합니다.

실제 텍스트는 `dataStream`에 저장됩니다. 스타일과 구조 정보는 병렬 배열에 저장되고 인덱스를 통해 텍스트에 연결됩니다.

### 속성

| 속성                 | 타입                       | 설명                                                            |
| ------------------ | ------------------------ | ------------------------------------------------------------- |
| dataStream         | `string`                 | 문서 본문의 일반 텍스트 스트림입니다. 특수 문자는 단락, 구역 나누기, 표, 사용자 지정 블록을 나타냅니다. |
| textRuns?          | `ITextRun[]`             | 인라인 스타일 범위입니다.                                                |
| paragraphs?        | `IParagraph[]`           | 단락 메타데이터와 단락 스타일입니다.                                          |
| sectionBreaks?     | `ISectionBreak[]`        | 구역 나누기 메타데이터입니다.                                              |
| customBlocks?      | `ICustomBlock[]`         | 플러그인에서 정의한 블록 자리 표시자입니다.                                      |
| tables?            | `ICustomTable[]`         | 문서 본문의 표 표식입니다. 표 정의는 `IDocumentData.tableSource`에 저장됩니다.     |
| columnGroups?      | `ICustomColumnGroup[]`   | 단 그룹 표식입니다.                                                   |
| blockRanges?       | `IDocumentBlockRange[]`  | 콜아웃, 인용문, 코드 블록과 같은 구조화된 블록 범위입니다.                            |
| customRanges?      | `ICustomRange[]`         | 하이퍼링크, 필드, 책갈피, 댓글, 멘션, 플러그인에서 정의한 범위와 같은 특수 범위입니다.           |
| customDecorations? | `ICustomDecoration[]`    | 댓글 강조 표시와 같은 장식 범위입니다.                                        |
| payloads?          | `Record<string, string>` | 임시 복사/붙여넣기 페이로드입니다. 이 필드는 영구 저장되지 않습니다.                       |

### dataStream

`dataStream`은 본문 텍스트의 신뢰할 수 있는 원본입니다. 단락은 일반적으로 `\r\n`으로 끝납니다.

```typescript
const body: IDocumentBody = {
  dataStream: 'Title\r\nHello Univer\r\n',
  paragraphs: [
    { startIndex: 5, paragraphId: 'p-title' },
    { startIndex: 19, paragraphId: 'p-body' },
  ],
}
```

### 특수 문자

일부 문서 요소는 `dataStream`에서 제어 문자로 표현되며 렌더러가 이를 확장합니다.

| 문자     | 의미               |
| ------ | ---------------- |
| `\r\n` | 단락 나누기           |
| `\n`   | 구역 나누기           |
| `\f`   | 페이지 나누기          |
| `\v`   | 단 나누기            |
| `\t`   | 탭                |
| `\0`   | 문서 끝             |
| `\b`   | 사용자 지정 블록 자리 표시자 |

표와 사용자 지정 범위도 내부적으로 제어 문자를 사용합니다. 표, 링크, 댓글, 블록 수준 기능을 다룰 때는 제어 문자를 직접 작성하지 말고 Facade API 또는 명령을 사용하는 것이 좋습니다.

## IDocumentData와의 관계

`IDocumentBody`는 기본 문서 흐름만 저장합니다. 외부 리소스는 `IDocumentData`에 저장됩니다.

* `tableSource`는 표 정의를 저장합니다.
* `drawings`는 이미지와 그리기 객체를 저장합니다.
* `headers`와 `footers`는 각각 자체 `IDocumentBody`를 포함합니다.
* `lists`는 단락 글머리 기호에서 참조하는 목록 정의를 저장합니다.
* `resources`는 플러그인에서 정의한 데이터를 저장합니다.
