【问题标题】:UpdateTextStyle Request Clearing Bold When Setting fontFamily设置 fontFamily 时 UpdateTextStyle 请求清除粗体
【发布时间】:2020-08-13 18:38:50
【问题描述】:

我正在尝试使用 API 更新 Google Docs 文档中一系列文本的字体。我正在尝试仅更改字体,而不是字体大小或样式属性,例如粗体或斜体。因此,例如,如果我有一个仅包含以下文本作为内容的文档:

你好世界

我只想更改 Hello 一词的字体,但保持其大小不变,仍为粗体和斜体。

我尝试使用以下代码文档来完成此操作。batchUpdate 请求

{
  "requests": [
    {
      "updateTextStyle": {
        "range": {
          "startIndex": 1,
          "endIndex": 6
        },
        "textStyle": {
          "weightedFontFamily": {
            "fontFamily": "Times New Roman"
          }
        },
        "fields": "weightedFontFamily"
      }
    }
  ]
}

结果是来自服务器的成功响应,但是当我检查文档时,我看到它更改了保持大小和斜体属性的字体,但没有保留粗体属性。我也曾使用 Google API Explorer 进行过尝试,并且可以重现相同的结果。

我的问题是如何在不丢失粗体的情况下更改字体?似乎它应该是可能的,因为它保持了斜体属性的完整性。为什么粗体不同?是bug吗?

我的目标是只更改字体而保留其他属性,因此我不想明确设置粗体或其他属性。我也不想事先确定属性并重置它们。这是更多的工作,并且会更慢,如果保持斜体,则不需要。

我可以使用 repeatCell.cell.userEnteredFormat.textFormat.fontFamily 请求在 Google 表格中毫无问题地执行非常类似的操作,并且它保持粗体和斜体。

提前感谢您提供任何见解或帮助。

【问题讨论】:

  • weightedFontFamily用作字段时,bold不会被修改。所以在当前阶段,我认为这可能是一个错误。向 Google 问题跟踪器报告如何? Ref 而且,我认为作为当前的解决方法,在使用weightedFontFamily 之后设置粗体样式怎么样?对于这种情况,我深表歉意。
  • 谢谢@Tanaike。我怀疑这可能是一个错误,但我通常会错误地确保我没有做错任何事情或首先错过任何事情。我使用该链接向 Google 报告了潜在的错误。
  • 感谢您的回复。为了显示当前情况,将您的回复作为答案发布如何?这样,它对遇到相同问题的其他用户很有用。

标签: google-docs-api


【解决方案1】:

如何在不丢失粗体的情况下更改字体?

回答

您必须先保存要修改的文本范围的字体粗细和粗体设置。该范围可能有不止一种字体设置。要获取范围的字体粗细和粗体设置,您必须首先检查 textRun.textStyle。如果未在此处定义,则必须查找名为StyleType 的段落并检查其粗细和粗体设置。如果未在此处定义,则必须检查 NORMAL_TEXT namedStyleType。如果未在此处定义,则必须使用 Google 文档编辑器的默认值,权重为 400,粗体为 false。

一旦您获得了范围的字体信息,您就可以为每种不同的字体发出请求。该请求与原始问题中的请求类似,但会根据保存的字体信息设置 weightedFontFamily.weight 和粗体属性。

{
  "requests": [
    {
      "updateTextStyle": {
        "range": {
          "startIndex": 1,
          "endIndex": 6
        },
        "textStyle": {
          "weightedFontFamily": {
            "fontFamily": "Times New Roman"
            "weight": savedWeight
          },
          "bold": savedBold
        },
        "fields": "weightedFontFamily"
      }
    }
  ]
}

为什么粗体不同?

回答

Google Docs API 使用 weightedFontFamily,其中权重子属性默认为 400,而不是当前字体权重。粗体设置只是增加了重量,所以粗体和重量是联系在一起的。 API 中没有当前的方法来设置仅保留粗细/粗体的字体。

这是一个错误吗?

回答

根据@Tanaike 的回复,我已通过 Google 问题跟踪器 (https://issuetracker.google.com/165029692) 向 Google 报告了该问题。他们告诉我它正在按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多