Segments de texte et paragraphes
Modèle fondé sur des index
Univer Docs ne stocke pas le texte enrichi sous forme d’arborescence imbriquée. Il stocke le texte brut dans body.dataStream1, puis utilise des plages d’index pour associer le style et la structure au texte.
Les structures fondées sur des index les plus courantes sont les suivantes :
ITextRun: plage de style de texte en ligne.IParagraph: métadonnées et style du paragraphe.ISectionBreak: métadonnées du saut de section.
ITextRun
ITextRun décrit le style d’une plage de texte continue.
| Propriété | Type | Description |
|---|---|---|
| st | number | Index de début, inclus. |
| ed | number | Index de fin, exclu. |
| sId? | string | ID du style référencé. |
| ts? | ITextStyle | Objet de style de texte en ligne. |
const body: IDocumentBody = { dataStream: 'Hello Univer\r\n', textRuns: [ { st: 0, ed: 5, ts: { bl: 1 }, }, { st: 6, ed: 12, ts: { cl: { rgb: '#2563eb' } }, }, ],}Dans cet exemple, Hello est en gras et Univer en bleu. Le saut de paragraphe \r\n n’est pas inclus dans les plages mises en forme.
IParagraph
IParagraph décrit les métadonnées au niveau du paragraphe. startIndex indique la position du saut de paragraphe dans dataStream.
| Propriété | Type | Description |
|---|---|---|
| startIndex | number | Index du saut de paragraphe. |
| paragraphId | string | ID stable du paragraphe. |
| paragraphStyle? | IParagraphStyle | Style du paragraphe, comme l’alignement, le retrait, l’interligne et le type de titre. |
| bullet? | IBullet | Métadonnées du marqueur de liste. |
const body: IDocumentBody = { dataStream: 'Hello Univer\r\nSecond line\r\n', paragraphs: [ { startIndex: 12, paragraphId: 'p-1', paragraphStyle: { namedStyleType: NamedStyleType.HEADING_1, }, }, { startIndex: 25, paragraphId: 'p-2', }, ],}ISectionBreak
ISectionBreak utilise également un index pour associer les paramètres d’une section au flux de texte. Il permet de redéfinir, pour une section donnée, le format de page, les marges, les en-têtes, les pieds de page, les colonnes et le sens du texte.
const body: IDocumentBody = { dataStream: 'First section\nSecond section\r\n', sectionBreaks: [ { startIndex: 13, pageSize: { width: 595, height: 842 }, marginTop: 72, marginBottom: 72, }, ],}Remarques
- Veillez à ce que les index correspondent à
dataStream. Des index incorrects peuvent rendre incohérents les plages de style, les paragraphes, les sélections ou le rendu. - Privilégiez les API Facade et les commandes pour modifier un document actif.
- Lorsque vous générez manuellement des instantanés, construisez d’abord
dataStream, puis calculez les plages et les positions des paragraphes à partir de cette chaîne.
Footnotes
-
Les positions comptent les unités UTF-16 de JavaScript, pas les caractères visibles :
"😀".lengthvaut 2. Une plage de texte[st, ed)exclut sa fin, contrairement aux plages de cellules dont les indices de fin sont inclusifs. ↩
Que pensez-vous de ce guide ?