如何在 Windows 上 使用 ONLYOFFICE 協做編輯文檔

0、安裝準備

若是是局域網,部署的電腦擁有固定ip(下文叫宿主機,切記)。電腦能打開cup的虛擬功能。若是部署到雲主機,道理是同樣的。javascript

環境是win7以上,win10如下。Win10區別就是安裝的docker軟件不一樣而已。html

第一步:肯定電腦打開了cpu虛擬打開。https://jingyan.baidu.com/article/22fe7ced3b4c003002617f17.htmljava

第二步:下載和安裝docker toolbox,默認安裝便可。下載地址http://get.daocloud.io/,下載支持舊版windows的docker toolbox,win10就直接下載docker了。web

第三步:啓動docker後在裏面拉取Onlyoffice Document Server 的Docker鏡像docker

一、拉取ONLYOFFICE Document Server 的Docker鏡像

拉取鏡像sudo docker pull onlyoffice/documentservertypescript

建議用離線的:json

(存出命令Administrator@604TFALNDKDKJWCMINGW64 ~/winfontwindows

$ dockersave -o onlyofficedocumentserver.tar onlyoffice/documentserver)api

dockerload < onlyofficedocumentserver.tar瀏覽器

二、啓動——映射至9000端口

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

三、替換容器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

 

四、二次開發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. }  

相關文章
相關標籤/搜索