APP下载

OA系统在线文档编辑系统的设计与实现

2023-11-24

常州信息职业技术学院学报 2023年5期
关键词:编辑器页面文档

吴 群

(常州机电职业技术学院通识教育部 江苏常州 213164)

0 引言

随着工作流引擎技术的不断发展,基于工作流引擎的OA系统实现了业务流程走向的柔性扩展与灵活调整,可配置的动态表单满足了用户多变的需求。随着应用的深入,流程在流转过程中除了结构化内容外,越来越多的非结构化内容也随着业务的拓展被引用,经常以文档附件的形式附加在流程表单上[1]。用户打开流程节点查看内容时,经常需要下载附件使用相应的文档阅读器才能打开内容进行查看和编辑,编辑完成后需要重新上传附件进行更新,由此对用户造成一定的麻烦,甚至有些终端因没有对应的插件无法打开附件内容。本文设计了将文档附件通过文档转换服务统一转换成Open Office XML格式,通过内嵌Web在线编辑器让用户无需下载能直接在页面中进行浏览与编辑,完成编辑退出时实现文档保存。

1 基本原理

本系统的目标是用户不需要安装任何插件,任何电脑或手机都能通过标准浏览器实现文档的在线编辑与浏览功能。首先构建在线文档编辑系统,然后通过Java Script脚本引入文档编辑器,通过文档编辑器连接在线文档编辑系统,调用服务打开文档,在浏览器中实现所有的编辑操作,还能控制用户是否可以下载或打印,在线编辑结束后被编辑的文档能自动上传到服务器端进行保存[2],其本质是调用Only Office平台接口来实现在线文档的编辑。Only Office平台是一款开源软件,集成了文档、电子邮件、事件、任务和客户关系管理工具的开源在线办公套件[3],平台能实时打开、编辑和协作处理DOC、DOCX、ODT、PPT、TXT、HTML等格式的文档,具有丰富的文字处理功能,能按照设定的规则编辑文档。

本文基于Only Office 平台API接口与OA系统文档接口进行二次开发,实现了文档列表、文档下载、文档上传、文档编辑、保存文档等处理逻辑,为OA系统实现对附件文档的在线编辑功能[4]。

2 系统设计

2.1 服务调用流程

本系统封装了Only Office平台的功能,为其他系统提供API调用,当OA系统的流程节点动态加载页面时,分析页面元素获得需要编辑或浏览的文档访问地址。节点显示页面引入Java Script脚本创建并加载文档编辑器,同时将文档访问地址和稳定的访问权限传递给在线文档编辑系统,系统根据要编辑的文档地址和用户权限进行文档编辑器的参数配置,文档编辑器根据设置参数请求下载文档,同时根据参数控制文档编辑器打开编辑显示或只读浏览模式。当发现有多个文档编辑器同时打开同一个文档,且文档在缓存区经被修改还未关闭保存时,Only Office平台会通过Web Socket消息让多个同时打开文档编辑器中的内容同步。当处于编辑模式的文档被文档编辑器关闭时,文档编辑器会触发调用在线文档编辑系统的保存文档接口,此时会根据文档状态下载保存最新的文档并更新文件日志表。在线文档编辑系统调用流程,如图1所示。

2.2 主要业务表设计

用户信息表和部门表与OA系统账号进行定时同步,上传文件表记录了每个用户上传的文件时间、编号、文件名、文件大小、文件类型、系统存放路径及文件的MD5校验值,通过一对多的方式关联文件日志表,文件日志表的日志ID是主键值,每次文件被修改后保存都记录在该日志表中。在记录文件日志表的同时会在文件对应的路径下,系统会以file_id-log_id保存多份文件多版本的修改稿,生成文档修改过程。文件缓存表跟踪当前Only Office平台上正在编辑或浏览的文件,在多个用户同时打开同一文件时,通过传递同一个file_key值实现多人协同编辑或浏览文档最新变化。在线文档编辑系统主要业务表如图2所示。

图2 在线文档编辑系统主要业务表

3 系统实现

3.1 在线文档编辑系统服务实现

在线文档编辑系统主要由后端数据访问实体层、业务逻辑控制层及前端被OA系统引用的页面显示层三部分组成。数据访问层类通过MybatisPlus工具生成数据库访问实体类及相应的服务接口,FileUpload类对应上传文件表file_info。字段ID为主键,字段upload_date为日期型,在数据转换为JSON时以“yyyy-mm-dd”格式输出。

业务逻辑控制层由多个工具类及Control控制器类实现,文件控制器类实现了文档的上传、文档列表、文档下载、文档显示或编辑、编辑文档保存回调与文档编辑状态查询等接口逻辑。

文档上传(Upload),采用POST模式上传文件,服务控制器收到文件后,首先判断上传文件名及后缀名,将文件存放到指定的目录中,根据请求信息构建FileUpload对象(文件名、存放路径、上传时间等信息),根据上传的文件内容计算文件的MD5码值,同时将FileUpload对象写入数据库file_info表中,最后返回上传成功消息。

文档列表(/Filelist),采用GET模式请求file_info数据表中的信息。该接口返回JSON格式的上传文件列表。

文档下载(/Download),采用GET模式请求下载指定文档内容。下载文档时根据文件唯一ID号得到文件名称及存储文件的实际路径,打开文件时,将文件写入流,设置响应头,告知浏览器以附件的形式下载和文件大小,以application/octet-stream类型输出数据。

文档保存回调(Callback),该接口支持GET和POST两种模式,接口接收Only Office回调时Json Object格式的请求参数,参数中包含的文档状态共有文档开始编辑、文档准备保存、文档保存错误、文档被关闭、文档保存错误等7种。本接口读取文档状态,当文档状态值为文档准备保存状态(其值为2)时,分析请求参数中当前被保存文档的下载地址,接口根据该下载地址完成文件下载,并将下载的文件放到指定的位置,同时更新文件日志表。

文档编辑(/Edit),采用GET模式请求编辑文档。控制器根据文件ID号和用户ID号查询文档基础配置,获取文档唯一标识、文档名称、文档类型、文档下载地址、打开文件的权限等数据,根据文件属性,生成本次编辑文档的Key值,并将文件信息及Key值记录到文件缓存表中,同时将所有参数传送到前端显示页面。

前端显示层由Only Office平台的JS脚本配合文件控制器显示或编辑文档接口配合Thymeleaf标签动态生成参数,实现对前端文档编辑器内容及界面进行控制。

前端页面代码中,通过[[${xxx}]]形式获取文档编辑接口中文档的相关属性数据,由此控制前端文档编辑窗口的显示样式及模式,参数中Type类型分三种:桌面型、嵌入型和移动型,分别用于不同的设备显示与编辑。Document属性中Filetype用于标识编辑文件的类型,主要有WORD文档、PPT等,Key是该文档在Open Office平台中的唯一标识,当多用户协作时,使用相同的标识。Title表示当前编辑的文档标题,URL地址是在线文档编辑器读取被编辑文档的下载地址,当指定Key值文档被首次打开时,Only Office平台中还没有缓存该文档,平台通过URL下载文档,然后通过转换服务将文档转换成Open Office XML格式,显示在前端文档编辑器中。当其他人员或再次打开相同Key值的文档时,只要该文档还在Only Office平台缓存中且没有被关闭,则平台将不会通过URL再次下载文档,且所有同时打开的多人可同步显示文档的变化。Permission控制文档是否能被编辑、下载及打印。EditConfig是对在线编辑器的配置,其中Callbackurl地址是Only Office平台在文档需要保存时的回调接口。参数中还有控制文档使用的语言、显示比例、是否进行文档内容语法检查及是否打开审计模式等,通过标签动态生成的文档参数。

3.2 Only Office平台搭建

Only Office安装有两种方式:一种采用脚本或源代码编译进行安装(下载地址:http://download.onlyoffice.com/install/install.sh);另一种使用Docker镜像安装,这是比较方便和官方推荐的安装方法,首先必须在当前操作系统上安装Docker容器服务,然后才能使用Docker镜像来安装。采用Docker镜像安装可以自动配置Only Office的所有依赖项,从而减少安装和配置的复杂度。具体安装方法:①查询Docker镜像:docker search onlyoffice;②拉取Docker镜像:sudo docker pull onlyoffice/documentserver;③查看Docker镜像:docker images;④创建并启动Only Office平台容器:sudo docker run-i-t-d-p 8080:80 onlyoffice/documentserver,通过访问http://localhost:8080,说明Only Office平台搭建成功。

3.3 前端嵌入文档编辑器

使用Java script脚本可以将Only Office文档/电子表格/演示文档编辑器集成到自己的网页中,并能配置和管理文档编辑器。

在网页中使用div占位符标签:

可以通过config对象实现对文档编辑器进行配置:

var docEditor = new DocsAPI.DocEditor( "placeholder ", config);

config = {

"document" : {

"fileType" : "docx" ,

"key" : "Khirz6zTPdfd7" ,

"title" : "示例文档标题.docx" ,

"url" : "https://abc.com/example-document.docx"

}, "documentType" : "word" ,

"editorConfig" : {

"callbackUrl" : "https://abc.com/callback.ashx"

}

泛微OA Ecology平台是一个基于工作流引擎的在线业务管理平台,具有配置灵活、开发代码及成本低等特性,其缺点是对接的插件及第三方平台是商业厂家,对开源产品的对接,官方没有任何支持,本系统开发是对泛微OA平台进行分析后,通过嵌入页面的方式实现前端对接,后端通过OA接口API对接用户信息、文档权限及表单内容的读取,让OA用户不安装任何插件的情况下实现在线文档的显示与编辑,在线文件编辑如图3所示。

图3 在线编辑文档

本系统采用Java语言开发,主要实现了文件上传、文件下载、文件列表查询、文件保存及文档编辑浏览等功能,系统连接了Only Office平台与OA系统,为OA系统提供文档管理与编辑服务,同时调用Only Office文档在线编辑服务为用户提供在线编辑预览功能。

4 结束语

本文基于Only Office平台,采用Java Spring Boot框架,构建了在线文档编辑系统,系统对接基于工作流引擎的OA办公关联系统,实现用户权限控制、文档在线编辑与预览、文档多版本切换及多用户协作编写同一文档,有效提高工作效率、节约办公成本。本系统的OA流程办公平台为上海泛微公司的Ecology产品,目前官方对接均为WPS、永中等商业在线文档编辑平台,本文基于开源技术设计开发的在线文档编辑系统对接Ecology产品有着积极的参考意义。

猜你喜欢

编辑器页面文档
大狗熊在睡觉
刷新生活的页面
有人一声不吭向你扔了个文档
你距离微信创作达人还有多远?
车辆段收发车运行图编辑器的设计与实现
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
基于VLIW目标机的ELF二进制编辑器设计与实现
不让他人随意下载Google文档
同一Word文档 纵横页面并存