NTKO Weboffice打开文档格式错误的解决方案

it2023-06-15  73

使用ntko提供的weboffice工具打开一个模板文档,发现格式不正确了,主要是页边距的设置跟源模板不一样了,分析原因得出如下结论:

首先区分一下我们项目中使用的【模板】的概念跟ntko提供的【template】头部套红模板两者的区别。

我们项目中的模板是直接使用文件服务中保存的模板文件,复制一份作为当前编辑文件继续编辑,也就是格式完全与服务器中保存的模板文件保持一致,而ntko的template功能其实是在一个正在编辑的文档头部追加一部分文字结构,例如套红头部(常见于公文的标准头部)。

ntko打开一个在线文档使用 ntko.OpenFromURL(documentUrl) 方法;

插入在线的template使用 ntko.AddTemplateFromURL(templateUrl) 方法;

造成格式不正确的原因:

之前的实现思路是,选择模板打开文档的时候,不传 documenUrl ,只传 templateUrl,这样在初始化的时候,检测到没有 documentUrl ,会自动新建一个空白文档,然后再把 templateUrl 中的内容追加在文档头部,这个时候 templateUrl 的页边距等设置其实是根据新建文档的默认设置来的,就是这个原因造成了打开模板文档格式错误的。

调整后的思路:

调整过后的思路是选择模板打开文档的时候,把模板文件的url直接赋值给 documentUrl ,这样打开的时候就是原模板的设置,但是保存的时候要注意,需要设置一个变量比如 isUseTemplate ,来判断一下是否是模板打开的,保存的时候可以通过设置 id为 isModifyFiled 的 value值来控制是新建文件还是修改文件(Y-修改 N-新建),基本不用 ntko 提供的template功能。

代码实现:要注意,在weboffice的js文件中不能出现es6的写法

var ntko var documentUrl var templateUrl var isUseTemplate var documentUrlIsNotEmpty function initWebOffice(){ documentUrl = getQuery('documentUrl') templateUrl = getQuery('templateUrl') isUseTemplate = getQuery('isUseTemplate') documentUrlIsNotEmpty = documentUrl && documentUrl !== '' && documentUrl !== null && documentUrl !== undefined init() } function init(){ ntko = document.getElementById('TANGER_OCX') if(documentUrlIsNotEmpty){ try{ ntko.OpenFromUrl(documentUrl) }catch(e){ ... } }else{ ntko.CreateNew('Word.Document') documentName = '新建文档.docx' } if (templateUrlIsNotEmpty) { ntko.ActiveDocument.Application.Selection.HomeKey(6) try{ ntko.AddTemplateFromURL(templateUrl) }catch(e){ ... } } } function saveDocumentToURL(){ if(documentIsNotEmpty){ document.getElementById('serverFileNameFiled').value = documentUrl.substring(documentUrl.lastIndexOf('/') + 1) if(isUseTemplate === 'Y'){ document.getElementById('isModifyFiled').value = 'N' // 新建 }esle{ document.getElementById('isModifyFiled').value = 'Y' // 修改 } } ... }

 

最新回复(0)