本手册由软航科技Markdown编辑器自动生成,最后更新时间:📅 2025/10/20
教程 高级 JavaScriptJava前端后端移动端

📖 文档摘要

本文档详细介绍了软航OFFICE文档控件从Windows平台向国产化Linux平台迁移的完整流程。涵盖控件加载方式、集成方法、环境配置等关键变化,支持中标麒麟、银河麒麟、统信UOS、深度操作系统等主流国产操作系统。文档包含详细的迁移步骤、注意事项和常见问题解答,帮助开发人员顺利完成平台转换。

软航OFFICE文档控件Windows平台向国产化(Linux)平台迁移指南

关于本方案

本文档详细描述了软航OFFICE文档控件在原先Windows环境上转为国产化环境后,控件具体的加载与集成方式的改变。可供OA系统开发人员,以便充分理解文档控件在Windows与国产环境上控件集成方式的变化。

方案背景

文档控件在Linux系统的推广

随着信息技术和互联网的快速发展普及,电子商务已经成为不可抗拒的现代商业潮流,云计算、大数据应用日趋成熟,但随之带来了许多问题和挑战。2014年4月8日起,微软停止了对Windows XP SP3操作系统提供服务支持。2020年1月24日,微软又停止了对Windows 7操作系统提供服务支持。但由于Windows的用户量十分庞大,病毒、木马层出不穷,因此引起了社会和广大用户的广泛关注和对信息安全的担忧。

而国产操作系统多为基于开源Linux二次开发的操作系统,所以其信息安全性能相对于Windows而言较高。工信部对此表示,将继续加大力度,支持Linux的国产操作系统以及生态环境的研发和应用,并希望用户可以使用国产操作系统。从此,国产化操作系统得到了较快的发展,至目前为止,已经有统信UOS、麒麟、中科方德、一铭、红旗等一众国产系统崛起,与此同时,国产系统的生态应用圈也逐渐丰富成熟。

为全面响应国家规划纲要,我司已推出国产化版的文档控件。该版本控件可在国产化环境下在线对Office文档进行编辑,并具备模板套红、痕迹保留等功能。

国产化OA办公需求逐渐增多

目前,国产操作系统发展比较迅速,想当多的政企单位已开始使用国产操作系统。所以原先Windows上的OA办公平台也逐渐开始向Linux上面发展。不久的将来,国产化办公系统可能会在政府机构上完全普及。

需求描述及分析

需求描述

随着国产化办公系统的发展,绝大多数OA办公系统都需要从Windows环境转向国产化环境。相应的,我们文档控件也需要进行平台的转换。而在平台转换过程中,我们控件集成方式需要做哪些改动,就是本文档说明的重点。

需求分析

我们控件在国产系统和Windows系统下面是两个不同的控件,所以在加载及调用上存在一些区别。首先,我们得理解两者之前的区别,可参考下图解析:

Windows与国产化控件对比图

从上图中我们不难发现,Windows与国产化的文档控件加载的区别主要体现在控件的安装以及加载上,而在接口调用方式以及实现的功能基本上是一致的。

方案介绍

方案组成

根据需求分析,本方案主要包括以下几个部分内容:控件安装方式的改变、控件集成方式的改变、控件加载方式的改变,如下图所示:

方案组成图

控件加载方式的改变

控件安装

不同于Windows环境上控件在浏览器中的自动安装,国产化环境上控件需要进行手动安装。国产化环境上,控件产品以安装包的形式存在,可通过命令或者安全配置工具进行安装(详细安装过程可参考安装教程文档)。

控件加载

Windows系统上面是通过直接在页面上嵌入object标签实现控件加载,国产系统上面也是在HTML页面上嵌入object标签来加载控件,但嵌入方式存在不同。

Windows环境下的控件加载

Windows环境下,object标签的常见引入方式:

HTML代码示例:

    var userAgent = navigator.userAgent, 
                rMsie = /(msie\s|trident.*rv:)([\w.]+)/, 
                rFirefox = /(firefox)\/([\w.]+)/, 
                rOpera = /(opera).+version\/([\w.]+)/, 
                rChrome = /(chrome)\/([\w.]+)/, 
                rSafari = /version\/([\w.]+).*(safari)/;
                var browser;
                var version;
                var ua = userAgent.toLowerCase();
                function uaMatch(ua) {
                    var match = rMsie.exec(ua);
                    if (match != null) {
                        return { browser : "IE", version : match[2] || "0" };
                    }
                    var match = rFirefox.exec(ua);
                    if (match != null) {
                        return { browser : match[1] || "", version : match[2] || "0" };
                    }
                    var match = rOpera.exec(ua);
                    if (match != null) {
                        return { browser : match[1] || "", version : match[2] || "0" };
                    }
                    var match = rChrome.exec(ua);
                    if (match != null) {
                        return { browser : match[1] || "", version : match[2] || "0" };
                    }
                    var match = rSafari.exec(ua);
                    if (match != null) {
                        return { browser : match[2] || "", version : match[1] || "0" };
                    }
                    if (match != null) {
                        return { browser : "", version : "0" };
                    }
                }
                var browserMatch = uaMatch(userAgent.toLowerCase());
                if (browserMatch.browser) {
                    browser = browserMatch.browser;
                    version = browserMatch.version;
                }


if (browser=="IE"){
    //IE浏览器控件加载代码;
}
else if (browser=="firefox"||browser=="chrome"){ 
        if(navigator.platform.toLowerCase().indexOf("linux")>-1){
            document.write('<object id="TANGER_OCX" type="application/ntko-plug"  codebase="'+codebase+'" width="'+width+'" height="'+height+'" ForOnSaveToURL="ntkosavetourl"  ForOndocumentopened="ntkoondocumentopened"');        
            document.write('ForOnpublishAshtmltourl="ntkopublishashtml"');
            document.write('ForOnpublishAspdftourl="ntkopublishaspdf"');
            document.write('ForOnSaveAsOtherFormatToUrl="ntkosaveasotherurl"');    
            document.write('<SPAN STYLE="color:red">尚未安装跨浏览器插件</SPAN>   ');
            document.write('</object>   ');
        }else{
            document.write('<object id="TANGER_OCX" type="application/ntko-plug"  codebase="'+codebase+'" width="'+width+'" height="'+height+'" ForOnSaveToURL="ntkosavetourl"  ForOndocumentopened="ntkoondocumentopened"');        
            document.write('ForOnpublishAshtmltourl="ntkopublishashtml"');
            document.write('ForOnpublishAspdftourl="ntkopublishaspdf"');
            document.write('ForOnSaveAsOtherFormatToUrl="ntkosaveasotherurl"');    
            document.write('_MakerCaption="'+MakerCaption+'"  ');
            document.write('_MakerKey="'+MakerKey+'"  ');
            document.write('_ProductCaption="'+ProductCaption+'"  ');
            document.write('_ProductKey="'+ProductKey+'"   ');    
            document.write('_NoExpireKey="'+NoExpireKey+'"   ');            
            document.write('clsid="{'+classid+'}" >');
            document.write('<SPAN STYLE="color:red">尚未安装跨浏览器插件</SPAN>   ');
            document.write('</object>   ');
        }    
}else if (Sys.opera){
        alert("sorry,ntko web印章暂时不支持opera!");
    }else if (Sys.safari){
         alert("sorry,ntko web印章暂时不支持safari!");
    }

JavaScript调用示例:

var ntko = document.getElementById("TANGER_OCX");
ntko.CreateNew("Word.Application");

不难发现,Windows上面控件的加载是直接在页面中嵌入object标签来实现,object标签的主要属性有id、classid、codebase。

国产化环境下的控件加载

国产化环境下,object标签的常见引入方式:

HTML代码示例:

 if (browser=="firefox"||browser=="chrome"){ 
        document.write('<object  name="webwps" id="TANGER_OCX" type="application/ntko-plug"  height="'+width+'" width="'+height+'" ForOnDocumentOpened = "ntkoondocumentopened"  ');
        document.write('ForOnSaveToURL="ntkosavetourl" ForOnDocumentClosed="OnDocumentClosed" ForOnSheetSelectionChange="OnSheetSelectionChange" ForOnAfterOpenFromURLCallBack="OnAfterOpenFromURLCallBack" ForOnBeginOpenFromURL="OnBeginOpenFromURL"');
        document.write('ForOnCustomMenuCmd2="OnCustomMenuCmd2" ForOnCustomToolBarCommand="OnCustomToolBarCommand" ForOnCustomButtonOnMenuCmd="OnCustomButtonOnMenuCmd"');
        document.write('ForOnFileCommand="OnFileCommand" ForOnCustomFileMenuCmd="OnCustomFileMenuCmd" ForOnScreenModeChanged="OnScreenModeChanged"');

//新增授权属性 2025-02-14
document.write('_NtkoAuthorizationID="FC3B8CDA-EE9D-4666-8D8E-091889C997B3-V6031"');

        document.write('ForOnWordBeforeRightClick="OnWordBeforeRightClick" ForOnSheetBeforeDoubleClick="OnSheetBeforeDoubleClick">');

        document.write('<SPAN STYLE="color:red">不能装载文档控件。请检查文档控件是否已经正确安装</SPAN> 请点击<a href="ntkoplugins.crx">安装组件</a></object>');

    }else{
        alert("sorry,linux文档控件暂时不支持该浏览器");
    }

JavaScript调用示例:

    var obj;    //OFFICE文档控件对象

    function init() {
         obj = document.getElementById("TANGER_OCX");
    }
    function OnSheetSelectionChange(a,b,c){
        console.log("OnSheetSelectionChange触发"+a+b+c);

    }
    function optSetRangeColorIndex(){
        obj.SetRangeColorIndex("sheet1","A1",6);
    }

    //=============================================================
    //                            事 件
    //=============================================================
    function OnAfterOpenFromURLCallBack( object, uStateCode )
    {
        alert("AfterOpenFromURL 事件"  + uStateCode + object.FullName );
    }

    function OnBeginOpenFromURL( uEnEIFT, uStateCode, returndata )
    {
        alert("OnBeginOpenFromURL 事件" + uEnEIFT + uStateCode + returndata );
    }

    function OnDocumentOpened( path, object)
    {
        var data = object.path;
        //alert("OnDocumentOpened 事件" + path );
    }

从上面示例可知,国产化环境下控件加载首先是将object标签放入一个数组中,然后以数组的形式通过js脚本调用获取到控件对象,再去页面中嵌入object标签。object标签中主要属性有id、type。

所以,Windows向Linux平台转变时,控件object标签的变化主要在嵌入方式、以及相关object属性调用上。

控件接口调用方式的改变

控件Windows转国产化平台除控件接口调用方式基本跟Windows环境一样,也是通过”控件对象.接口名”的形式进行调用。而控件事件的声明方式可参考Windows上跨浏览器的事件声明。

接口调用示例

// 创建文档
var ntko = getNtkoObject();
ntko.CreateNew("Word.Application");

// 打开文档
ntko.OpenFromURL("http://example.com/document.docx");

// 保存文档
ntko.SaveAs("http://example.com/save.docx");

// 关闭文档
ntko.Close();

控件相关环境的改变

控件环境的改变主要体现在浏览器和办公软件的环境,目前国产化环境上,控件可在360、奇安信、红莲花、火狐(52 ESR及以下)等支持NPAPI的浏览器中运行,办公软件支持WPS OFFICE和永中OFFICE。

支持的国产化操作系统

支持的浏览器环境

支持的办公软件

迁移步骤总结

  1. 环境准备:确保目标系统为支持的国产化操作系统
  2. 控件安装:在国产化环境中手动安装控件
  3. 代码修改
    • 修改object标签的创建方式
    • 调整控件加载逻辑
    • 更新相关属性配置
  4. 测试验证:在目标环境中进行功能测试

注意事项

  1. 确保目标浏览器支持NPAPI插件
  2. 办公软件需要正确安装并配置
  3. 网络环境需要支持控件与服务器的通信
  4. 建议在迁移前进行充分的功能测试

❓ 迁移常见问题FAQ

Q: 从Windows平台迁移到国产化Linux平台需要做哪些准备工作?

A: 迁移前需要确保目标系统为支持的国产化操作系统(如中标麒麟、银河麒麟、统信UOS等),安装支持的浏览器(360、奇安信、红莲花等)和办公软件(WPS OFFICE、永中OFFICE),并确保网络环境支持控件与服务器的通信。

Q: 控件在国产化环境中的加载方式有什么变化?

A: 在国产化环境中,控件需要手动安装。需要修改object标签的创建方式,调整控件加载逻辑,并更新相关属性配置。具体变化包括控件ID、classid等属性的调整。

Q: 迁移过程中如何确保控件功能正常?

A: 建议在迁移前进行充分的功能测试,包括文档打开、编辑、保存等基本功能,以及电子签章、权限控制等高级功能。确保目标浏览器支持NPAPI插件,办公软件正确安装并配置。

Q: 国产化环境支持哪些操作系统和浏览器?

A: 支持中标麒麟、银河麒麟、统信UOS、深度操作系统、中科方德、一铭、万里红等国产化操作系统。浏览器支持360浏览器、奇安信浏览器、红莲花浏览器、火狐浏览器(52 ESR及以下版本)。

Q: 迁移后原有的文档处理功能是否会有影响?

A: 迁移后文档处理的核心功能保持不变,包括Word、Excel、PowerPoint文档的编辑、电子签章、权限控制等功能。主要变化在于控件的加载方式和集成方式,功能本身没有影响。

Q: 如果迁移过程中遇到问题,如何获得技术支持?

A: 软航科技提供专业的技术支持服务,包括迁移方案咨询、技术指导、问题排查等。可以通过官网联系技术支持团队,或查看相关技术文档和示例代码。