Office JS Word 插件:插入页眉OOXML时额外增行问题
解决Word JS API读取页眉OOXML后插回新增空行的问题
这个问题我之前也踩过坑,根源在于你读取的页眉OOXML包含了完整的页眉容器结构,而非单纯的页眉内容。
当你调用header.getOoxml()时,返回的是带<w:hdr>根元素的完整OOXML片段,示例如下:
<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:p> <w:r> <w:t>我的页眉内容</w:t> </w:r> </w:p> </w:hdr>
要是直接把这段OOXML插回页眉,相当于在现有页眉内部嵌套了一个完整的页眉容器,Word渲染时就会多出一行空行。
具体解决步骤
- 读取页眉OOXML后,解析提取
<w:hdr>标签内的子内容,抛弃外层的页眉容器结构 - 用提取出的纯内容调用
insertOoxml(),而非原始的完整OOXML片段
修改后的代码示例:
Word.run(function (context) { var docSections = context.document.sections; context.load(docSections); return context.sync().then(function () { var header = docSections.items[0].getHeader("primary"); context.load(header); return context.sync().then(function () { return header.getOoxml(); }).then(function (headerOoxml) { // 提取<w:hdr>内部的纯内容 var hdrStartTagEnd = headerOoxml.indexOf(">", headerOoxml.indexOf("<w:hdr")) + 1; var hdrEndTagStart = headerOoxml.indexOf("</w:hdr>"); var innerHeaderContent = headerOoxml.substring(hdrStartTagEnd, hdrEndTagStart); // 先清空原有页眉内容(避免内容叠加) header.clear(); // 插入处理后的纯页眉内容 header.insertOoxml(innerHeaderContent, "start"); return context.sync(); }); }); }).catch(function (error) { console.error("操作出错:", error); });
额外提个细节:如果不清空原有页眉就插入,会导致新旧内容叠加,所以建议先调用header.clear()再插入处理后的内容。
内容的提问来源于stack exchange,提问作者Imran Khan
相关产品推荐
相关产品推荐

