📖 文档摘要
本文档详细介绍了软航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系统上面是通过直接在页面上嵌入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。
支持的国产化操作系统
- 中标麒麟桌面操作系统
- 银河麒麟桌面操作系统
- 统信UOS桌面操作系统
- 深度操作系统(Deepin)
- 中科方德操作系统
- 一铭操作系统
- 万里红操作系统
支持的浏览器环境
- 360浏览器
- 奇安信浏览器
- 红莲花浏览器
- 火狐浏览器(52 ESR及以下版本)
支持的办公软件
- WPS OFFICE
- 永中OFFICE
迁移步骤总结
- 环境准备:确保目标系统为支持的国产化操作系统
- 控件安装:在国产化环境中手动安装控件
- 代码修改:
- 修改object标签的创建方式
- 调整控件加载逻辑
- 更新相关属性配置
- 测试验证:在目标环境中进行功能测试
注意事项
- 确保目标浏览器支持NPAPI插件
- 办公软件需要正确安装并配置
- 网络环境需要支持控件与服务器的通信
- 建议在迁移前进行充分的功能测试
❓ 迁移常见问题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: 软航科技提供专业的技术支持服务,包括迁移方案咨询、技术指导、问题排查等。可以通过官网联系技术支持团队,或查看相关技术文档和示例代码。