如何根据字体获取文本范围
How to get text ranges based on fonts
我有一段应用了多种字体。因此有许多范围。有没有办法(不直接使用 OOXML)获取这些范围、它们的字体和文本?这是我正在谈论的 OOXML 片段示例:
<w:p w:rsidR="00301FAD" w:rsidRDefault="00301FAD">
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:b/>
<w:bCs/>
</w:rPr>
<w:t>Spam</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"/>
</w:r>
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:b/>
<w:bCs/>
<w:i/>
<w:iCs/>
</w:rPr>
<w:t>and</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"/>
</w:r>
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:i/>
<w:iCs/>
</w:rPr>
<w:t>eggs</w:t>
</w:r>
</w:p>
Word 中的段落文本如下所示:
Spam and eggs
您可以使用段落 class' 拆分方法,该方法可以根据字符串将段落拆分为多个范围。我使用这个函数来打印所提供示例的字体和文本:
async function run() {
await Word.run(async (context) => {
const body = context.document.body;
var par = body.paragraphs.getFirst();
let words = par.split([" "]);
let first_word = words.getFirst();
first_word.load(["font", "text"]);
await context.sync();
console.log(f_word.font);
console.log(f_word.text);
});
}
这样做的一个缺点是您无法区分具有如下字体的单词:Spam,或像这样: Spam 因为它会将粗体 属性 设置为 null 两次。
我有一段应用了多种字体。因此有许多范围。有没有办法(不直接使用 OOXML)获取这些范围、它们的字体和文本?这是我正在谈论的 OOXML 片段示例:
<w:p w:rsidR="00301FAD" w:rsidRDefault="00301FAD">
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:b/>
<w:bCs/>
</w:rPr>
<w:t>Spam</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"/>
</w:r>
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:b/>
<w:bCs/>
<w:i/>
<w:iCs/>
</w:rPr>
<w:t>and</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"/>
</w:r>
<w:r w:rsidRPr="001D4040">
<w:rPr>
<w:i/>
<w:iCs/>
</w:rPr>
<w:t>eggs</w:t>
</w:r>
</w:p>
Word 中的段落文本如下所示:
Spam and eggs
您可以使用段落 class' 拆分方法,该方法可以根据字符串将段落拆分为多个范围。我使用这个函数来打印所提供示例的字体和文本:
async function run() {
await Word.run(async (context) => {
const body = context.document.body;
var par = body.paragraphs.getFirst();
let words = par.split([" "]);
let first_word = words.getFirst();
first_word.load(["font", "text"]);
await context.sync();
console.log(f_word.font);
console.log(f_word.text);
});
}
这样做的一个缺点是您无法区分具有如下字体的单词:Spam,或像这样: Spam 因为它会将粗体 属性 设置为 null 两次。