如何在 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

建議用離線的:

(存出命令Administrator@604TFALNDKDKJWCMINGW64 ~/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

root@38e27823ae92:/#dir或者ls –al

 

root@6dfa5705aaef:~#cd /usr/share/fonts/

root@6dfa5705aaef:/usr/share/fonts#ls

truetype  X11

//刪除文件夾X11

root@6dfa5705aaef:/usr/share/fonts#rm -R dir X11

rm:cannot remove dir: No such file or directory

root@6dfa5705aaef:/usr/share/fonts#ls

truetype

root@6dfa5705aaef:/usr/share/fonts#cd truetype

root@6dfa5705aaef:/usr/share/fonts/truetype#ls –al

root@6dfa5705aaef:/usr/share/fonts/truetype#ls -al

total462392

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

………………

//刪除trutype文件夾下所有文件

root@6dfa5705aaef:/usr/share/fonts/truetype#rm -R dir *.*

rm:cannot remove dir: No such file or directory

root@6dfa5705aaef:/usr/share/fonts/truetype#rm -R dir *

rm:cannot remove dir: No such file or directory

rm:cannot remove custom: Device or resource busy

root@6dfa5705aaef:/usr/share/fonts/truetype#ls

custom

root@6dfa5705aaef:/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

……

 

root@6dfa5705aaef:/usr/share/fonts/truetype#exit

exit

 

Administrator@604TFALNDKDKJWCMINGW64 ~/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

……

 

Administrator@604TFALNDKDKJWCMINGW64 ~/winfont

//進入容器內

$ dockerexec -it 6df /bin/bash

root@6dfa5705aaef:/#sudo mkfontscale

root@6dfa5705aaef:/#sudo mkfontdir

root@6dfa5705aaef:/#sudo fc-cache -fv

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

…………

fc-cache:succeeded

root@6dfa5705aaef:/#exit

exit

//退出容器

Administrator@604TFALNDKDKJWCMINGW64 ~/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. }  



    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章