# 流版签(OfficeSDK)技术说明文档

# 背景&作用

过去版本每集成一套流版签产品,就是同一个类中增加if...else写法,长此以往造成了流版签新产品极高的集成扩展成本。

V9.0SP1采用统一接口的方式,提供了一套标准API接口,项目上如有新的流版签产品(如永中wo/dcs、福昕轻阅读、联想中台等)需要集成,则参考API做集成即可,无需将代码耦合到产品核心库中。

# 适用版本

协同V9.0SP1及未来版本

# 名词解释:

  • 套红:将文单中的值组合成文本、图片插入到word文档中对应的书签位置。

  • 清稿:保存当前正文的一个备份文件,然后删除文档中的手写批注、修改的痕迹,并保存正文。

  • 花脸:清稿操作中保存的备份文件。

# 1.使用方式

# 1.1页面引入

// 在需要使用的html页面引入officeSDK.js
<script type="text/javascript" src="/seeyon/common/office/js/officeSDK.js"></script>

注意:如果是PC端,当前页面必需引入了jQuery的ajax请求,并且能通过$.ajax调用;如果是移动端,当前页面必需引入cmp平台库。

# 1.2初始化

var params = {
    fileId: "", // 文件id
    fileType: "", //文档类型
    editType: "", // 编辑权限 (编辑:’2,1’,只读:’0,0’ 或者 ’4,0’)
}

var officeSDK = new OfficeSDK(params);
var initParams = {
    domId:’’, //插件加载的目标 DOM 元素的 ID。
    fileType:’’,//文档类型'docx', 'doc', 'wps', 'xlsx', 'xls', 'et',         'ods', 'csv', 'pptx', 'ppt', 'dps', 'odp'
    mode:VIEW,//打开模式VIEW、EDIT、SIGN 三选一
}

ES5写法:

officeSDK.init(initParams, function(error, result){
  // TODO:初始化完后的回调
});

ES6写法(async/await):

try { let ret = await officeSDK.init(initParams);
  // TODO:初始化成功
}catch(e) {
  // TODO:初始化失败
}

# 1.3打开文件

打开文件目前有两种方式:

1、嵌入式打开 嵌入式打开需要在init的时候给domId设置挂载点的元素id,流版签插件将会作为子元素挂载在页面上

2、弹窗式打开 弹窗式打开需要在openfile的时候设置isDialog为true,流版签插件将会挂载在自己的弹窗中显示出来。如果需要弹出隐藏的方式需要设置isHide为true(嵌入式不支持隐藏式打开,需要业务自己控制挂载点的显示/隐藏)

var openParams = {
    isDialog: true,//是否是弹窗打开
    isHide:true,//是否隐藏式打开(主要针对弹窗的打开方式)
    showDialogTitle:’正文’,//弹窗标题
    noTransFlag:false,//是否需要显示预览(客户端模式的三方插件需要,如:WPS客户端)true:不显示,false:显示
}
officeSDK.openFile(openParams, function(error, result){
  // TODO:打开文件后的回调
});

# 2.接口说明

# 2.1初始化参数说明

{
    /** 文件ID */
    fileId: "",
    /** 文件保存到本地时候的文件名字*/
    fileName: "",
    /** 创建时间 */
    createDate: "",
    /** 应用的URL,例如http://127.0.0.1/seeyon */
    webRoot: OfficeSDK.utils.getWebRoot(),
    /** 文档类型 .doc,.docx,.xls,.xlsx*/
    fileType: "",//文档类型
    contentId: "",
    editType: "",
    /** 系统配置的最大的文件上传大小 */
    officeOcxUploadMax: "",
    /** 当前的国际化语言环境 */
    currentLanguage: OfficeSDK.utils.currentLanguage(),
    /** 原始文件的创建时间,例如调用模板的时候,模板文件的创建时间*/
    originalCreateDate: "",
    /** 原始文件的文件ID,例如调用模板的时候,模板文件的文件的ID*/
    originalFileId: "",
    /** 是不是需要clone原始文件*/
    needCloneFile: "",
    /**当前用户ID */
    userId: "",
    canCopy: 1, // 是否能够复制
    /** 当前用户的name */
    currentUserName: "",
    /*代理人ID*/
    affairMemberId: "",
    /*代理人姓名*/
    affairMemberName: "",
    /** 文件大小 */
    officeFileRealSize: "",
    /** 是否可以修改正文*/
    canEditContent: OfficeSDK.utils.getCanEditContent(),
    /** 当前页面是那个页面*/
    currentPage: "",
    originalNeedClone: "",
    extendParams: {},
    mode: 'view',//view edit sign
    // 编辑器内转OFD按钮能否使用
    canTransOfd: undefined,
    // 编辑器内转PDF按钮能否使用
    canTransPdf: undefined,
    // 编辑器内下载按钮能够使用
    canDownload: undefined,
    // 编辑器内能上传按钮能使用
    canUpload: undefined,
    // 编辑器内打印按钮能够使用
    canPrint: undefined,
    /** 当前打开,修改保存Office文档是否保留痕迹。某些情况下可能不需要保留痕迹,例如协同公文的新建*/
    // 编辑器内的盖章按钮能够使用
    canSign: undefined,
    // 编辑器内的验章按钮能够使用,验证按钮默认不受控制
    canCheckSign: undefined,
    // 编辑器内的清稿按钮能够使用
    canClearTrail: undefined,
    // 痕迹按钮是否显示
    isShowTrailBtn: undefined,
    // 编辑正文时是否开启修订模式(保留修改痕迹)
    canRevise: undefined,
    // 关闭弹窗的回调函数
    dialogCloseCallback: null,
    // 添加对应的流程Id
    processId: (typeof (processId) != "undefined" ? processId : (typeof parent.processId != "undefined" ? parent.processId : parent.parent.processId)),
};

# 2.2 init

函数描述:初始化 SDK 插件函数

函数原型:function init (params = {}, callBack)

函数入参:

@param {Object} params - 初始化插件所需的参数对象,可以为空对象。
{
  @param {string} params.domId - 插件加载的目标 DOM 元素的 ID。
  @param {string} params.fileType - 文档类型 //'docx','doc','wps','xlsx','xls','et','ods','csv','pptx','ppt','dps','odp'。
  @param {string} params.mode - 模式 DOM  VIEW、EDIT、SIGN 三选一
}
@param {Function} callBack - 初始化完成后的回调函数,可选参数。

返回结果:返回promise对象

例:

officeSDK.init(initParams, function(error, result){
    if (error) {
        // 初始化失败
    } else {
        // 初始化成功
    }
});

说明:callBack返回两个值,第一个值返回error,第二个值result返回调用后台接口函数执行的结果。

如果返回的error不为null,表明初始化adapter失败,当前插件配置不支持当前的文件类型打开。如果为null,则有合适的adapter。result的返回值{code:0,msg:'',data:{}},如果code=0表示初始化adapter是成功,如果code=-1表示初始化不成功,表示后台接口异常。

# 2.3 setOptions

函数描述:更改adapter实例的公共参数

函数原型:function setOptions (params = {}, callBack)

函数入参:

@param {object} params
@param {Function} callBack

返回结果:返回promise对象

例:

officeSDK.setOptions(openParams, function(error, result){
    if (error) {
        //设置失败
    } else {
        //设置成功
    }
});

# 2.4 openFile

函数描述:打开文件

函数原型:function openFile (params = {}, callBack)

函数入参:

@param {object} params
{
  @param {Boolean} isDialog 是否是弹窗打开
  @param {Boolean} isHide 是否隐藏式打开
  @param {String} showDialogTitle 弹窗标题
  @param {true} noTransFlag 是否需要显示预览(客户端模式的三方插件需要,如:WPS客户端)true:不显示,false:显示
}
@param {Function} callBack 打开文件后返回的回调函数

返回结果:返回promise对象

例:

officeSDK.openFile(openParams, function(error, result){
    if (error) {
        //打开文件失败
    } else {
        //打开文件成功
    }
});

# 2.5 destory

函数描述:销毁当前adapter中持有的三方实例(包括关闭文档,关闭弹窗)

函数原型:function destory(params = {}, callBack)

函数入参:

@param {object} params (目前无需该参数,传null即可)
@param {Function} callBack 打开文件后返回的回调函数

返回结果:返回promise对象

例:

officeSDK.destory(params, function(error, result){
    if (error) {
        //销毁弹窗失败
    } else {
        //销毁弹窗成功
    }
});

# 2.6 closeFile

函数描述:关闭文件

函数原型:function closeFile (params = {}, callBack)

函数入参:

@param {object} params

@param {Function} callBack 回调函数

返回结果:返回promise对象

例:

officeSDK.closeFile(openParams, function(error, result){
    if (error) {
        //关闭文件失败
    } else {
        //关闭文件成功
    }
});

# 2.7 saveFile

函数描述:保存文件

函数原型:function saveFile (params = {}, callBack)

函数入参:

@param {object} params{
  @param {string}  fileId        文件ID
  @param {boolean} isAsync       是否异步保存
  @param {boolean} noTransFlag   true //wps保存后不触发转换
  @param {boolean} isNotCloseDoc true //wps保存后不关闭文档
}

@param {Function} callBack 回调函数

返回结果:返回promise对象

例:

officeSDK.saveFile(openParams, function(error, result){
    if (error) {
        //保存文件失败
    } else {
        //保存文件成功
    }
});

# 2.8 taohong

函数描述:文档套红

函数原型:function taohong (params = {}, callBack)

函数入参:

@param {object} params{
  @param {Array} allBoomark //套红书签对象
  {
    @param {string} bookmark // 书签名称
    @param {string} type     // 值类型 ('TEXT': 文本,'IMAGE':图片,'DOCUMENT': 文件)
    @param {string} text     // 书签值
    @param {object} fileInfo // 文件信息(文件类型的书签使用)
    @param {object} imgInfo  // 图片信息(图片类型的书签使用)
  }
  @param {string} templateUrl  // 模板id
  @param {string} templateType // 套红类型('edoc':正文套红-对当前正文进行套红,'script': 文单套红-加载模版文件进行套红)
  @param {Object} extParam     // 扩展参数
}
@param {Function} callBack 回调函数

返回结果:返回promise对象

# 2.9 isAvailable

函数描述:编辑器是否可用

函数原型:function isAvailable (params = {})

函数入参:

@param {object} params

返回结果:返回布尔对象true/false

# 2.10 isModified

// 文档是否被修改 isModified: function () { },

# 2.11 print

// 打印 print: function () {},

# 2.12 delAnnotations

// 删除文档批注 delAnnotations: function () { },

# 2.13 saveHuaLian

// 保存花脸 saveHuaLian: function () {},

# 2.14 clearTrail

// 清稿 clearTrail: function () {},

# 2.15 bookmarkHighlight

// 高亮、定位跳转到书签 bookmarkHighlight: function () {},

# 2.16 transform

// 流式文件转板式文件(PDF、OFD) transform: function () { },

# 2.17 getBookmarkList

// 获取书签列表 getBookmarkList: function () {},

# 2.18 delBookmarks

// 删除书签 delBookmarks: function () {},

# 2.19 contentLength

// 获取文档大小 contentLength: function () {},

# 2.20 contentLengthAndCreateDate

// 获取文档大小和创建日期 contentLengthAndCreateDate: function () {},

# 2.21 signature

// 签章 signature: function () {},

# 2.22 hasProfessionalSign

// 是否有专业签章 hasProfessionalSign: function () {},

# 2.23 countSignatures

// 获取签章数量 countSignatures: function () {},

# 2.24 download

// 下载正文 download: function () {},

# 2.25 analyzing

// 解析图片 analyzing: function () {},

# 2.26 isEmpty

// 判断正文是否为空 isEmpty: function (params, callback) { },

# 2.27 supportMultiEditing

// 是否支持多人编辑 supportMultiEditing: function () {},

# 2.28 batchSwap

//批量替换书签内容 batchSwap: function () {},

# 2.29 swapWithoutHighlight

//替换书签内容不高亮 swapWithoutHighlight: function () {},

# 2.30 batchDeleteBM

//删除指定书签 batchDeleteBM: function () {},

# 2.31 decryptSeal

// 印章置灰 decryptSeal: function () {},

# 2.32 isClientApp

// 是否为客户端。例如wps加载项 isClientApp: function () {},

# 2.33 isAllowSignature

// 是否有签章功能 isAllowSignature: function () {},

# 2.34 isAllowTransform

// 是否有转版功能 isAllowTransform: function () {},

# 2.35 hide

// 隐藏弹窗 hide: function () {}

# 3.枚举

//mode 的枚举类型 VIEW、EDIT、SIGN
OfficeSDK.ENUM_MODE_TYPE = {
    VIEW: 'VIEW', // 预览
    EDIT: 'EDIT',  // 编辑
    SIGN: 'SIGN'  // 签章
}

# 4、三方插件使用(TODO)

descript

创建人:qijl
修改人:het、liangyd、qijl