UpdateTextStyle 请求在设置 fontFamily 时清除粗体
UpdateTextStyle Request Clearing Bold When Setting fontFamily
我正在尝试使用 API 更新 Google Docs 文档中一系列文本的字体。我试图只更改字体而不是字体大小或样式属性,如粗体或斜体。因此,例如,如果我有一个文档,其中仅包含以下文本作为内容:
你好世界
我只想更改 Hello 一词的字体,但要保持它的大小不变,并且仍然是粗体和斜体。
我尝试使用以下代码完成此操作 documents.batchUpdate 请求
{
"requests": [
{
"updateTextStyle": {
"range": {
"startIndex": 1,
"endIndex": 6
},
"textStyle": {
"weightedFontFamily": {
"fontFamily": "Times New Roman"
}
},
"fields": "weightedFontFamily"
}
}
]
}
结果是来自服务器的成功响应,但是当我检查文档时,我看到它更改了字体,保留了大小和斜体属性,但没有保留粗体属性。我也使用 Google API Explorer 尝试过,并且可以重现相同的结果。
我的问题是如何在不丢失粗体的情况下更改字体?看起来它应该是可能的,因为它保持了斜体属性。为什么粗体不同?是错误吗?
我的目标是只更改字体而保留其他属性,所以我不想明确设置粗体或其他属性。我也不想事先确定属性并重新设置它们。这是更多的工作,而且会更慢,如果保持斜体则不需要。
我可以使用 repeatCell.cell.userEnteredFormat.textFormat.fontFamily 请求在 Google 工作表中毫无问题地做一些非常相似的事情,并且它保持粗体和斜体。
在此先感谢您的任何见解或帮助。
如何在不丢失粗体的情况下更改字体?
回答
您必须先保存要修改的文本范围的字体粗细和粗体设置。该范围可能有不止一种字体设置。要获取范围的字体粗细和粗体设置,您必须首先检查 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 文档 API 使用 weightedFontFamily,其中权重 sub-attribute 默认为 400 而不是当前字体粗细。粗体的设置只是增加了权重,所以粗体和粗体是联系在一起的。目前 API 中没有设置字体的方法,只留下 weight/bold。
这是一个错误吗?
回答
根据@Tanaike 的回复,我已通过 Google 问题跟踪器 (https://issuetracker.google.com/165029692) 将此问题报告给 Google。他们告诉我它正在按预期工作。
我正在尝试使用 API 更新 Google Docs 文档中一系列文本的字体。我试图只更改字体而不是字体大小或样式属性,如粗体或斜体。因此,例如,如果我有一个文档,其中仅包含以下文本作为内容:
你好世界
我只想更改 Hello 一词的字体,但要保持它的大小不变,并且仍然是粗体和斜体。
我尝试使用以下代码完成此操作 documents.batchUpdate 请求
{
"requests": [
{
"updateTextStyle": {
"range": {
"startIndex": 1,
"endIndex": 6
},
"textStyle": {
"weightedFontFamily": {
"fontFamily": "Times New Roman"
}
},
"fields": "weightedFontFamily"
}
}
]
}
结果是来自服务器的成功响应,但是当我检查文档时,我看到它更改了字体,保留了大小和斜体属性,但没有保留粗体属性。我也使用 Google API Explorer 尝试过,并且可以重现相同的结果。
我的问题是如何在不丢失粗体的情况下更改字体?看起来它应该是可能的,因为它保持了斜体属性。为什么粗体不同?是错误吗?
我的目标是只更改字体而保留其他属性,所以我不想明确设置粗体或其他属性。我也不想事先确定属性并重新设置它们。这是更多的工作,而且会更慢,如果保持斜体则不需要。
我可以使用 repeatCell.cell.userEnteredFormat.textFormat.fontFamily 请求在 Google 工作表中毫无问题地做一些非常相似的事情,并且它保持粗体和斜体。
在此先感谢您的任何见解或帮助。
如何在不丢失粗体的情况下更改字体?
回答
您必须先保存要修改的文本范围的字体粗细和粗体设置。该范围可能有不止一种字体设置。要获取范围的字体粗细和粗体设置,您必须首先检查 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 文档 API 使用 weightedFontFamily,其中权重 sub-attribute 默认为 400 而不是当前字体粗细。粗体的设置只是增加了权重,所以粗体和粗体是联系在一起的。目前 API 中没有设置字体的方法,只留下 weight/bold。
这是一个错误吗?
回答
根据@Tanaike 的回复,我已通过 Google 问题跟踪器 (https://issuetracker.google.com/165029692) 将此问题报告给 Google。他们告诉我它正在按预期工作。