如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档相关的知识,希望对你有一定的参考价值。

0、安装准备

如果是局域网,部署的电脑拥有固定ip(下文叫宿主机,切记)。电脑能打开cup的虚拟功能。如果部署到云主机,道理是一样的。

环境是win7以上,win10以下。Win10区别就是安装的docker软件不同而已。

第一步:确定电脑打开了cpu虚拟打开。https://jingyan.baidu.com/article/22fe7ced3b4c003002617f17.html

第二步:下载和安装docker toolbox,默认安装即可。下载地址http://get.daocloud.io/,下载支持旧版windows的docker toolbox,win10就直接下载docker了。

第三步:启动docker后在里面拉取Onlyoffice Document Server 的Docker镜像

1、拉取ONLYOFFICE Document Server 的Docker镜像

拉取镜像sudo docker pull onlyoffice/documentserver

建议用离线的:

(存出命令[email protected] ~/winfont

$ dockersave -o onlyofficedocumentserver.tar onlyoffice/documentserver)

dockerload < onlyofficedocumentserver.tar

2、启动——映射至9000端口

docker run-i-t-d-p9000:80onlyoffice/documentserver

3、替换容器onlyofficedocument server的字体

//进入容器(运行的镜像)内

$ dockerexec -it 38e27 /bin/bash

[email protected]:/#dir或者ls –al

 

[email protected]:~#cd /usr/share/fonts/

[email protected]:/usr/share/fonts#ls

truetype  X11

//删除文件夹X11

[email protected]:/usr/share/fonts#rm -R dir X11

rm:cannot remove dir: No such file or directory

[email protected]:/usr/share/fonts#ls

truetype

[email protected]:/usr/share/fonts#cd truetype

[email protected]:/usr/share/fonts/truetype#ls –al

[email protected]:/usr/share/fonts/truetype#ls -al

total462392

drwxr-xr-x11 root   root       4096 Feb 19 04:17 .

………………

//删除trutype文件夹下所有文件

[email protected]:/usr/share/fonts/truetype#rm -R dir *.*

rm:cannot remove dir: No such file or directory

[email protected]:/usr/share/fonts/truetype#rm -R dir *

rm:cannot remove dir: No such file or directory

rm:cannot remove custom: Device or resource busy

[email protected]:/usr/share/fonts/truetype#ls

custom

[email protected]:/usr/share/fonts/truetype#ls -al

total 12

drwxr-xr-x10 root root 4096 Feb 19 10:14 .

drwxr-xr-x  6 root root 4096 Feb 19 10:12 ..

drwxr-xr-x  2 root root 4096 Feb 19 03:48 custom

……

 

[email protected]:/usr/share/fonts/truetype#exit

exit

 

[email protected] ~/winfont

//将当前文件夹C:\Users\Administrator\下的winfont文件夹内的字体全部拷贝到容器的文件夹/usr/share/fonts/truetype

$ tar -cv* | docker exec -i 6df tar x -C /usr/share/fonts/truetype

kaiu.ttf

msjh.ttc

msjhbd.ttc

msjhl.ttc

msyh.ttc

msyh.ttf

msyhbd.ttc

msyhl.ttc

simfang.ttf

simhei.ttf

simkai.ttf

simli.ttf

simsun.ttc

simsunb.ttf

simyou.ttf

……

 

[email protected] ~/winfont

//进入容器内

$ dockerexec -it 6df /bin/bash

[email protected]:/#sudo mkfontscale

[email protected]:/#sudo mkfontdir

[email protected]:/#sudo fc-cache -fv

/usr/share/fonts:caching, new cache contents: 0 fonts, 1 dirs

…………

fc-cache:succeeded

[email protected]:/#exit

exit

//退出容器

[email protected] ~/winfont

$ dockerexec 6df /usr/bin/documentserver-generate-allfonts.sh

GeneratingAllFonts.js, please wait...Done

onlyoffice-documentserver:docservice:stopped

onlyoffice-documentserver:docservice:started

onlyoffice-documentserver:converter:stopped

onlyoffice-documentserver:converter:started

 

4、二次开发EngineerCMS

4.1 协作编辑页面

[html] view plain copy

  1. <!DOCTYPE html>  

  2.   

  3. <html style="height: 100%;">  

  4.   

  5. <head>  

  6.   

  7.    <title>fei-OnlyOffice</title>  

  8.   

  9. </head>  

  10.   

  11. <body style="height: 100%; margin: 0;">  

  12.   

  13.    

  14.   

  15.     <dividdivid="placeholder" style="height: 100%"></div>  

  16.   

  17.     <script type="text/javascript"src="http://安装docker电脑的ip:9000/web-apps/apps/api/documents/api.js"></script>  

  18.   

  19.     <scripttypescripttype="text/javascript">  

  20.   

  21.         //alert({{.Doc.FileName}});  

  22.   

  23.         window.docEditor = newDocsAPI.DocEditor("placeholder",  

  24.   

  25.             {  

  26.   

  27.                "document": {  

  28.   

  29.                    "fileType": "{{.fileType}}",  

  30.   

  31.                    "key": "{{.Key}}",//"Khirz6zTPdfd7"  

  32.   

  33.                    "title": "{{.Doc.FileName}}",  

  34.   

  35.                    "url": "http://运行engineercms电脑的ip/attachment/onlyoffice/{{.Doc.FileName}}"  

  36.   

  37.                 },  

  38.   

  39.                 "documentType":"{{.documentType}}",  

  40.   

  41.                "editorConfig": {  

  42.   

  43.                    "callbackUrl": "http:// 运行engineercms电脑的ip /url-to-callback?id={{.Doc.Id}}",  

  44.   

  45.                    "user": {  

  46.   

  47.                        "id": "{{.Uid}}",  

  48.   

  49.                        "name": "{{.Uname}}"  

  50.   

  51.                    },  

  52.   

  53.                    "lang": "zh-CN",//"en-US",  

  54.   

  55.                 },  

  56.   

  57.                "height": "100%",  

  58.   

  59.                "width": "100%"  

  60.   

  61.             });  

  62.   

  63.    </script>  

  64.   

  65. </body>  

  66.   

  67. </html>  


4.2 协作页面的保存和回调

[plain] view plain copy

  1. type Callback struct {  

  2.   

  3.    Key         string   `json:"key"`  

  4.   

  5.    Status      int     `json:"status"`  

  6.   

  7.    Url         string   `json:"url"`  

  8.   

  9.    Changesurl  string  `json:"changesurl"`  

  10.   

  11.    History     history `json:"history"`  

  12.   

  13.    Users       []string `json:"users"`  

  14.   

  15.    Actions     []action `json:"actions"`  

  16.   

  17.    Lastsave    string  `json:"lastsave"`  

  18.   

  19.    Notmodifiedbool     `json:"notmodified"`  

  20.   

  21. }  

  22.   

  23.    

  24.   

  25. type action struct {  

  26.   

  27.    Type   int  

  28.   

  29.    userid string  

  30.   

  31. }  

  32.   

  33.    

  34.   

  35. type history struct {  

  36.   

  37.    changes       []change  

  38.   

  39.    serverVersionstring  

  40.   

  41. }  

  42.   

  43.    

  44.   

  45. type change struct {  

  46.   

  47.    created string  

  48.   

  49.    User    User1  

  50.   

  51. }  

  52.   

  53.    

  54.   

  55. type User1 struct {  

  56.   

  57.    id   string  

  58.   

  59.    name string  

  60.   

  61. }  

  62.   

  63. //关闭浏览器标签后获取最新文档保存到文件夹  

  64.   

  65. func (c *OnlyController) UrltoCallback() {  

  66.   

  67.    // pk1 :=c.Ctx.Input.RequestBody  

  68.   

  69.    id :=c.Input().Get("id")  

  70.   

  71.    //pid转成64为  

  72.   

  73.    idNum, err :=strconv.ParseInt(id, 10, 64)  

  74.   

  75.    if err != nil {  

  76.   

  77.       beego.Error(err)  

  78.   

  79.    }  

  80.   

  81.    //根据附件id取得附件的prodid,路径  

  82.   

  83.    onlyattachment,err := models.GetOnlyAttachbyId(idNum)  

  84.   

  85.    if err != nil {  

  86.   

  87.       beego.Error(err)  

  88.   

  89.    }  

  90.   

  91.    

  92.   

  93.    var callbackCallback  

  94.   

  95.    json.Unmarshal(c.Ctx.Input.RequestBody,&callback)  

  96.   

  97.    

  98.   

  99.    ifcallback.Status == 1 || callback.Status == 4 {  

  100.   

  101.       c.Data["json"]= map[string]interface{}{"error": 0}  

  102.   

  103.       c.ServeJSON()  

  104.   

  105.    } else ifcallback.Status == 2 {  

  106.   

  107.       resp, err :=http.Get(callback.Url)  

  108.   

  109.       if err != nil{  

  110.   

  111.          beego.Error(err)  

  112.   

  113.       }  

  114.   

  115.       body, err :=ioutil.ReadAll(resp.Body)  

  116.   

  117.       if err != nil{  

  118.   

  119.          beego.Error(err)  

  120.   

  121.       }  

  122.   

  123.       deferresp.Body.Close()  

  124.   

  125.       if err != nil{  

  126.   

  127.          beego.Error(err)  

  128.   

  129.       }  

  130.   

  131.    

  132.   

  133.       f, err :=os.OpenFile(".\\attachment\\onlyoffice\\"+onlyattachment.FileName,os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm)  

  134.   

  135.       if err != nil{  

  136.   

  137.          beego.Error(err)  

  138.   

  139.       }  

  140.   

  141.       deferf.Close()  

  142.   

  143.       _, err =f.Write(body)  

  144.   

  145.       if err != nil{  

  146.   

  147.          beego.Error(err)  

  148.   

  149.       } else {  

  150.   

  151.          err =models.UpdateOnlyAttachment(idNum)  

  152.   

  153.          if err !=nil {  

  154.   

  155.             beego.Error(err)  

  156.   

  157.          }  

  158.   

  159.       }  

  160.   

  161.       c.Data["json"]= map[string]interface{}{"error": 0}  

  162.   

  163.       c.ServeJSON()  

  164.   

  165.    }  

  166.   

  167. }  

技术分享图片技术分享图片技术分享图片技术分享图片


    以上是关于如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档的主要内容,如果未能解决你的问题,请参考以下文章

    如何使用APACHE在windows上>?

    我们如何通过 git 在 windows 上使用 linux 命令?

    如何使用 Visual Studio 2017 在 Windows 上构建 OpenSSL?

    如何在 Windows 上使用作曲家?

    如何让 SWT 浏览器控件在 Windows 上使用 Mozilla 而不是 IE?

    如何在Linux上运行Windows应用程序