如何获取基于字体的文本范围



我有一个段落应用了多种字体。因此有很多范围。有没有一种方法(不直接使用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中的段落文本看起来像这样:

垃圾邮件

鸡蛋

您可以使用段落类的split方法,该方法可以根据字符串将段落拆分为范围。我使用这个函数来打印所提供示例的字体和文本:

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,因为它将两次将bold属性设置为null。

最新更新