如何通过API在Google文档中添加样式段落

问题描述 投票:0回答:2

我有一个功能性 PHP 脚本,可以将纯文本添加到 Google 文档中,但我很难插入带有样式的段落。我想要达到的目标是

  1. 附加标题段落和文本
  2. 附加带有超链接的段落

insertText
请求,但无法直接在请求中设置此文本的样式。并且没有 insertParagraph,因此每次插入文本时我什至无法创建新行。 https://developers.google.com/docs/api/reference/rest/v1/documents/request

使用 Google Docs API 是多么困难,这令人沮丧,完成这样的基本任务应该更容易,请帮忙。

google-docs google-docs-api
2个回答
4
投票

我相信您的目标如下。

  • 您想要以段落样式和文本样式放置文本。
  • 您想使用 Google Docs API 来实现此目的。

在这种情况下,以下示例请求正文怎么样?

流量:

为了实现您的目标,当使用batchUpdate方法时,作为示例流程,使用以下流程。

  1. 插入文本。
    • 在此示例中,插入了
      Sample1\n
      Sample2\n
      文本。
  2. 设置段落样式。
    • 在这种情况下,“HEADING_1”和“NORMAL_TEXT”分别反映在
      Sample1\n
      Sample2\n
      的文本中。
  3. 设置文本样式。
    • 在本例中,超链接
      https://www.google.com
      设置为
      Sample2\n
      的文本。

当该流程反映在请求主体中时,就会变成如下所示。当然,例如,您可以更改此流程,例如“1.插入

Sample1\n
。2.设置段落样式。3.插入
Sample2\n
。4.设置段落样式。5.设置文本样式。”。

请求正文示例:

{
  "requests": [
    {
      "insertText": {
        "text": "Sample1\n",
        "location": {
          "index": 1
        }
      }
    },
    {
      "insertText": {
        "text": "sample2\n",
        "location": {
          "index": 9
        }
      }
    },
    {
      "updateParagraphStyle": {
        "range": {
          "startIndex": 1,
          "endIndex": 8
        },
        "paragraphStyle": {
          "namedStyleType": "HEADING_1"
        },
        "fields": "namedStyleType"
      }
    },
    {
      "updateParagraphStyle": {
        "range": {
          "startIndex": 9,
          "endIndex": 17
        },
        "paragraphStyle": {
          "namedStyleType": "NORMAL_TEXT"
        },
        "fields": "namedStyleType"
      }
    },
    {
      "updateTextStyle": {
        "range": {
          "startIndex": 9,
          "endIndex": 16
        },
        "textStyle": {
          "link": {
            "url": "https://www.google.com"
          }
        },
        "fields": "link"
      }
    }
  ]
}

测试:

当您使用Docs API的batchUpdate方法的“Try this API”测试此请求正文时,您可以通过此链接进行测试。在此链接中,请求正文已设置。请准备一份示例 Google 文档并设置您的 Google 文档 ID。

结果:

当此请求正文用于 Google 文档时,将获得以下结果。

enter image description here

参考资料:


0
投票

官方文档建议向后插入段落,以避免计算

updateParagraphStyle
insertText
以及其他 Google Documents API 资源所需的索引。对于整个内容具有相同样式的段落来说,这可能很容易实现,但对于样式部分来说则不太容易实现。

要插入具有命名样式(如标题 1)的段落,请使用:

  • insertText 添加段落文本。
  • updateParagrapStyle 设置名为 style 的段落。

要格式化单词或短语,即将其格式化为超链接,请使用:

  • 更新文本样式

注意:虽然索引是从零开始的,但使用的索引是 1,因为文本应插入现有段落内。新文档有一个默认段落。

下面的示例使用

Array.prototype.reverse()
Array.prototype.reduce()
Docs.Documents.batchUpdate
制作所请求的资源对象数组。

function insertStyledParagraphs() {
    const id = DocumentApp.getActiveDocument().getId();
    const newParagraphs = [
        {
            text: 'Sample text',
            style: { namedStyleType: 'HEADING_1' }
        },
        {
            text: 'Another sample text with a link',
            style: { namedStyleType: 'NORMAL_TEXT' },
            links: [
                {
                    // Should match exactly a word or phrase from the new paragraph text property
                    text: 'link',
                    url: 'https://www.example.com'
                }
            ]
        }
    ]
    const requests = newParagraphs.reverse().reduce((arr, p) => {
        arr.push(
            // Insert new empty paragraph
            {
                insertText: {
                    location: {
                        index: 1,
                    },
                    text: `\n`,

                }
            },
            // Update paragraph style
            {
                updateParagraphStyle: {
                    paragraphStyle: Object.assign({}, p.style),
                    fields: Object.keys(p.style).join(','),
                    range: {
                        startIndex: 1,
                        endIndex: 2
                    }
                },

            },
            // insert paragraph text
            {
                insertText: {
                    location: {
                        index: 1,
                    },
                    text: p.text,
                }
            },

        );
        //
        if (p.link) {
            const start = 1 + p.text.indexOf(p.link.text);
            const end = 1 + p.text.indexOf(p.link.text) + p.link.text.length;
            arr.push({
                updateTextStyle: {
                    textStyle: {
                        link: {
                            url: p.link.url
                        }
                    },
                    fields: 'link',
                    range: {
                        startIndex: start,
                        endIndex: end
                    }
                }
            })
        }
        return arr;
    }, [])
    Docs.Documents.batchUpdate({ requests }, id);
}

这可以轻松扩展以格式化段落内的文本,即将粗体、斜体、字体颜色等应用于某些单词或短语。

资源

指南

参考

© www.soinside.com 2019 - 2024. All rights reserved.