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

相关文章
相关标签/搜索