行業文庫
行業文庫

INDUSTRY NEWS

首頁 > 行業文庫 > 正文
大神解讀在Windows或Liunx系統上使用ONLYOFFICE協作編輯文檔開發
發布時間:2020-03-25 23:41:12
1、說明——可以加我qq6277979溝通。
 
ONLYOFFICE Document Server提供文檔協作的服務功能,支持Word,Excel和PowerPoint以及國產WPS的協作。但是這里告訴我們,需要進行文檔管理和存儲的二次開發。它api里現成的開發好的文檔管理平臺,有java,node.js,PHP等,可能不具備權限功能吧。
 
Please note, that ONLYOFFICE Document Server includes the documenteditor, document editing service, document command service and documentconversion service.The document manager and documentstorage service areeither included to Community Server or must be implemented by the softwareintegrators who use ONLYOFFICE Document Server on their own server.
 
它自己的ONLYOFFICE/CommunityServer就是管理文件用的,是一個龐大的項目管理系統。
 
ONLYOFFICE CommunityServer is a free open source collaborative system developed to managedocuments, projects, customer relationship and email correspondence, all in oneplace.
 
Nextcloud,可道云等云盤系統也支持ONLYOFFICE協作服務,我用Golang語言開發的EngineerCMS來實現ONLYOFFICE的文檔管理和存儲,調用ONLYOFFICE Document Server服務來進行文檔協作,權限完全按照官方的community。
 
協作的好處在于少了來回傳遞文檔,少了匯總的負責人,特別是十多人合作編寫文檔的時候,匯總的工作量大,容易出錯,任何人稍微修改一點,都要重新傳遞整個文檔,匯總后還要再次發給大家核對……。
 
協作也可以應用于校審流程,校核和審查直接在文檔上修改即可。
 
其他如月報的合作,工作任務表的更新:每個人的任務表要隨時更新,除非用專業的任務管理軟件,否則用Excel表格的話,也是要負責人匯總更新表格,應付領導檢查。
 
會議紀要寫好了,把鏈接發給大家,有意見直接在上面修改補充。
 
投標要多人協作的話,用這個平臺也是不錯的。
 
報表的匯總。
 
市場上協作的平臺不下幾十種,著名的如石墨,一起寫,騰訊文檔協作TIM,Google Doc,office365,office online等,基本按人月收費,免費的有人數限制,并且想自己部署在局域網的話也不大可能。你的文檔上傳給他們或許有諸多不便呢。比如銀行的報表,嘿嘿,你懂的。
 
所以,我就在ONLYOFFICE Document Server基礎上用Golang語言開發了文檔管理和存儲功能,方便大家免費無限制任意部署的需求。
 
總的思路就是比如在局域網的某臺windows(或linux)電腦上安裝docker容器來運行ONLYOFFICE Document Server,然后運行EngineerCMS來調用ONLYOFFICE Document Server的服務。在云服務器上部署也是一個道理。
 
ONLYOFFICE目前存在的缺點:漢字輸入不是很方便,就是當輸入符號的時候,它會重復將前面的漢字又輸進去一次:解決辦法,在設置里勾選象形文字(5.1.2新版已經解決這個問題);Excel表格里的文字格式沒有刪除線、上下標之類,文本框中的文字有這些格式,Word中也有;QQ拼音輸入法按空格不能輸出漢字,(5.1.2新版已經解決這個問題)搜狗輸入法可以;字體/樣式選擇里顯示的是英文,不是漢字(用ps修改一下圖片即可);打開文檔默認文字檢查都是打開的,新版5.1.2版支持word目錄,但沒有文檔結構(免費版不支持文檔結構圖,需要另外開發,已經有解決方案)。但瑕不掩瑜,它的功能還是很強大的,而且隨著版本的更替,會解決這些問題的。
 
2、安裝準備
 
如果是局域網,部署的電腦擁有固定ip(下文叫宿主機,切記)。電腦能打開cup的虛擬功能。如果部署到云主機,道理是一樣的。
 
環境是win7以上,win10以下。Win10區別就是安裝的docker軟件不同而已,win10不需要設置端口轉發。
 
linux就更簡單了。
 
第一步:確定電腦打開了cpu虛擬打開。https://jingyan.baidu.com/article/22fe7ced3b4c003002617f17.html
 
第二步:下載和安裝docker toolbox,默認安裝即可。下載地址http://get.daocloud.io/,下載支持舊版windows的docker toolbox,win10就直接下載docker了。
 
第三步:啟動docker后在里面拉取Onlyoffice Document Server 的Docker鏡像
 
3、拉取ONLYOFFICE Document Server 的Docker鏡像
 
拉取鏡像:啟動docker,在里面輸入命令docker pull onlyoffice/documentserver
 
(注意:docker要斷網啟動!!切記,啟動后再聯網。如果已經運行了onlyoffice document server 下次開機,重新啟動docker后,不需要在運行onlyoffice的)
 
可以用我做好的鏡像導入(離線包導入),已經設置好了字體,修正了幾個翻譯錯誤,可以省略第5步,從第4步直接跳過第5步到第6步。
 
用docker load < fei6onlyoffice5.4.2.tar命令。
 
建議用離線的,
 
(Administrator@604TFALNDKDKJWCMINGW64 ~
 
$ dockerexport -o onlyoffice-`date +%Y%m%d`.tar 6df)
 
$ docker import  onlyoffice-20180220-import.tar onlyoffice/documentserver——import命令是錯誤的。
 
離線的包在我的網盤中:https://pan.baidu.com/s/1gf0ucuR,離線包有5個:
 
第一個是onlyoffice_load.tar,替換好了字體,修正了幾個翻譯錯誤,是用commit命令生成新的包后save導出的。
 
第二個是onlyoffice-20180220-import.tar,這個包雖然里面已經替換好了字體,但導入后暫時不知道怎樣運行起來。
 
第三個是onlyofficedocumentserver-load.tar這個包就是原生態的pull下來的鏡像打的包,用save命令打的包,用loader命令導入,然后運行,需要替換字體。
 
第四個是fei3onlyoffice.tar,這個包是用5.1.5版做成的,添加了字體,修改了幾處界面翻譯錯誤,修改了。
 
第五個是fei5onlyoffice5.3.4.tar,這個包是用5.1.5版做成的,添加了字體……
 
第六個是fei6onlyoffice5.4.2.tar,這個包解決了中文字體名稱問題。
 
應該下載第六個文件,放到docker命令行對應的目錄下,方便運行命令導入(load)這個鏡像。一般在c盤-users-administrator或者其他用戶名下(在docker命令行里輸入dir,看看當前目錄下有哪些文件,一般就能找到這個目錄了。)
 
4、啟動——映射至9000端口(運行鏡像后變成容器)
 
docker run -i -t -d -p 9000:80 onlyoffice/documentserver
 
如果是導入的鏡像,上面的命令中onlyoffice/documentserver用鏡像id代替,查閱鏡像用docker images命令。
 
5、替換 添加容器onlyofficedocument server的字體
 
在網盤中下載字體winfont壓縮包。字體來源于https://github.com/neroxps/Docker-Only-Office-Chinese-font和win10系統,win10系統提取中文字體的方法:控制面板——搜字體——查看安裝的字體——再在搜索欄輸入中文 2個字,這些就是需要的中文字體了。有些體積大的字體就不要放了,免得OO啟動太慢。
 
新版自5.1.2已經以來支持中文字體了,所以不用刪除它自帶的字體了。但只有文泉驛的3種字體,可以根據下文再增加一些字體。
 
//進入容器(運行的鏡像)內,刪除/usr/share/fonts下除truetype外其他文件和文件夾
 
$ docker exec -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
 
total462392
 
drwxr-xr-x11 root   root       4096 Feb 19 04:17 .
 
………………
 
//刪除trutype文件夾下所有文件,除了custome文件夾外
 
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中
 
字體文件在我的網盤中:https://pan.baidu.com/s/1gf0ucuR
 
$ 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
 
//進入容器內
 
$ docker exec -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
 
$ docker exec 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
 
 如果機器重啟后,斷網情況下啟動docker,此時不需要再運行不要用docker run命令,要用docker start 容器id,可以直接調用OO服務。
 
完成后記得清理chrome瀏覽器緩存,否則還是亂碼新導入的字體不會生效。chrome瀏覽器:設置—高級—隱私設置和安全性—清除瀏覽數據—時間范圍選擇時間不限……
 
具體替換字體的命令見下圖,很詳細具體了。
 
修正excel、word、ppt翻譯錯誤:
 
Administrator@604TFALNDKDKJWC MINGW64 ~/zh
 
$ docker exec -it 6df /bin/bash
 
root@6dfa5705aaef:/#cd /var/www/onlyoffice/documentserver/web-apps/apps/spreadsheeteditor/main/locale/
 
root@6dfa5705aaef:/var/www/onlyoffice/documentserver/web-apps/apps/spreadsheeteditor/main/locale#ls
 
cs.json en.json  fr.json  ja.json nl.json  pt.json  sk.json tr.json  vi.json
 
de.json es.json  it.json  lv.json pl.json  ru.json  sl.json uk.json  zh.json
 
root@6dfa5705aaef:/var/www/onlyoffice/documentserver/web-apps/apps/spreadsheeteditor/main/locale#exit
 
exit
 
Administrator@604TFALNDKDKJWC MINGW64 ~/zh
 
$ tar-cv zh.json | docker exec -i 6df tar x -C /var/www/onlyoffice/documentserver/web-apps/apps/spreadsheeteditor/main/locale/
 
zh.json
 
word的翻譯文件/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/locale/
 
$ tar-cv zh.json | docker exec -i 6df tar x -C /var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/locale/
 
6、還可以替換幫助文件為中文……
 
/var/www/onlyoffice/documentserver/apps/presentationeditor/main/resources/help/zh/Contents.json
 
/var/www/onlyoffice/documentserver/apps/spreadsheeteditor/main/resources/help/zh/Contents.json
 
/var/www/onlyoffice/documentserver/apps/documenteditor/main/resources/help/zh/Contents.json
 
7、連接數20個的限制
 
做完以上工作,你可以將修改后的容器保存為新的鏡像,然后save導出后給其他機器用。
 
docker commit將修改后鏡像保存到本地,參數是容器ID,新名字:版本標志
 
#docker ps -all
 
CONTAINER ID IMAGE   COMMAND    CREATED       STATUS          PORTS   NAMES
 
b3426410ff43 centos:7 "/bin/bash" 4 minutes ago   Exited (0) 4 seconds ago     centos7ssh
 
#docker commit b59myimage/centos7-ssh
 
下次可以輸入剛保存的名字啟動修改了字體的鏡像了。
 
導出鏡像——一定要導出保存,否則docker經常自己升級,容器啊,鏡像啊,都會丟失,追悔莫及。
 
所以,啟動docker的時候要關閉網絡,否則它自動升級。等docker完全啟動后,再打開網絡。
 
docker save -o onlyoffice.tar onlyoffice/documentserver
 
6、運行和修改文檔管理平臺EngineerCMS
 
直接去https://github.com/3xxx/EngineerCMS查看源碼
 
直接去https://github.com/3xxx/EngineerCMS/releases下載編譯好的二進制文件
 
或者直接去https://pan.baidu.com/s/1gf0ucuR下載軟件包,直接運行engineercms即可用瀏覽器chrome訪問127.0.0.1了,不用配置環境,因為它是golang語言編寫的跨平臺的可執行文件。如果運行出現閃退,則在conf文件夾下更改app.conf文件中的端口號,或者修改runmode為prod模式。
 
(1)運行前要替換EngineerCMS\views\onlyoffice\onlyoffice.tpl中的3處IP,如果engineercms和docker安裝在同一個電腦上,那么三個IP相同,見下面的6.1節。
 
(2)docker toolbox訪問前要按照下文中第7節中的方法設置宿主機(安裝docker的電腦)virtualbox的端口轉發。win10的windows docker不用設置端口轉發了。
 
有問題聯系我QQ6277979,微信同號
 
人才港www.rcg.cn
 
6.1協作編輯頁面要根據你的情況進行修改(ip地址、中文界面)
 
一定要用ip,不要用localhost、127.0.0.1之類的代替本機ip,本機調試要用192.168.99.100
 
注意:下文只是標識出需要修改的3處ip位置,代碼并不能直接拷貝過去運行。請在engineercms文件夾中對應的原始文件上進行修改。
 
EngineerCMS\views\onlyoffice\onlyoffice.tpl:
 
 
 
   
 
 
   
    <script type="text/javascript"src="http://安裝docker電腦的ip:9000/web-apps/apps/api/documents/api.js"></script>
    <scripttype="text/javascript">
        //alert({{.Doc.FileName}});
       window.docEditor = new DocsAPI.DocEditor("placeholder",
            {
               "document": {
                   "fileType": "{{.fileType}}",
                   "key": "{{.Key}}",//"Khirz6zTPdfd7"
                   "title": "{{.Doc.FileName}}",
                   "url": "http://運行engineercms電腦的ip:端口號/attachment/onlyoffice/{{.Doc.FileName}}"
                },
               "documentType": "{{.documentType}}",
               "editorConfig": {
                   "callbackUrl": "http://運行engineercms電腦的ip:端口號/url-to-callback?id={{.Doc.Id}}",
                   "user": {
                       "id": "{{.Uid}}",
                       "name": "{{.Uname}}"
                   },
                   "lang": "zh-CN",//"en-US",菜單中文化
                },
               "height": "100%",
               "width": "100%"
            });
   </script>
 
 


7、端口轉發

docker pull onlyoffice/documentserver
docker run --name onlyoffice --restart always -i -t -d -p 9000:80 onlyoffice/documentserver
 
-d:后臺運行 
 
-p 9000:80 :端口映射,前一個9000代表虛擬機的端口,后一個80代表docker容器的端口 
 
命令執行完成后,可以通過http://192.168.99.100:9000訪問Document服務的歡迎界面,提示:Document Server is running表示正常
 
這時只能在你自己的機器上訪問,同一個局域網中的其他機器是不能訪問的,原因是:Windows上的docker是運行在一個虛擬機里面的,看官方給的圖: 
 
 要讓別的機器也訪問到,需要配置一下虛擬機。設置如下: 
 
雙擊運行安裝docker toolbox生成的Oracle VMVirtualBox。
 
點擊端口轉發:下圖中主機IP為安裝docker的電腦IP,主機端口為9000,子系統IP為192.168.99.100,子系統端口為9000。
 
這樣配置完成后,別的機器也可以訪問docker 容器了。
 
 
 
下文的開發僅供興趣參考。
 
8、二次開發EngineerCMS
 
8.1 協作編輯頁面
 
 
 
 
   
 
 
   
    <script type="text/javascript"src="http://安裝docker電腦的ip:9000/web-apps/apps/api/documents/api.js"></script>
    <scripttype="text/javascript">
        //alert({{.Doc.FileName}});
        window.docEditor = newDocsAPI.DocEditor("placeholder",
            {
               "document": {
                   "fileType": "{{.fileType}}",
                   "key": "{{.Key}}",//"Khirz6zTPdfd7"
                   "title": "{{.Doc.FileName}}",
                   "url": "http://運行engineercms電腦的ip:端口號/attachment/onlyoffice/{{.Doc.FileName}}"
                },
                "documentType":"{{.documentType}}",
               "editorConfig": {
                   "callbackUrl": "http:// 運行engineercms電腦的ip:端口號/url-to-callback?id={{.Doc.Id}}",
 
                   "user": {
                       "id": "{{.Uid}}",
                       "name": "{{.Uname}}"
                   },
                   "lang": "zh-CN",//"en-US",
                },
               "height": "100%",
               "width": "100%"
            });
   </script>
 

 

8.2 協作頁面的保存和回調——下面是go語言,官方文檔有phpjavanode.js等。

 
type Callback struct {
   Key         string   `json:"key"`
   Status      int     `json:"status"`
   Url         string   `json:"url"`
   Changesurl  string  `json:"changesurl"`
   History     history `json:"history"`
   Users       []string `json:"users"`
   Actions     []action `json:"actions"`
   Lastsave    string  `json:"lastsave"`
   Notmodifiedbool     `json:"notmodified"`
}
type action struct {
   Type   int
   userid string
}
type history struct {
 changes       []change
   serverVersionstring
}
type change struct {
   created string
   User    User1
}
 
type User1 struct {
   id   string
   name string
}
 
//關閉瀏覽器標簽后獲取最新文檔保存到文件夾
func (c *OnlyController) UrltoCallback() {
   // pk1 :=c.Ctx.Input.RequestBody
   id :=c.Input().Get("id")
   //pid轉成64為
   idNum, err :=strconv.ParseInt(id, 10, 64)
   if err != nil {
      beego.Error(err)
   }
   //根據附件id取得附件的prodid,路徑
   onlyattachment,err := models.GetOnlyAttachbyId(idNum)
   if err != nil {
      beego.Error(err)
   }
 
   var callbackCallback
   json.Unmarshal(c.Ctx.Input.RequestBody,&callback)
   ifcallback.Status == 1 || callback.Status == 4 {
      c.Data["json"]= map[string]interface{}{"error": 0}
      c.ServeJSON()
   } else ifcallback.Status == 2 {
      resp, err :=http.Get(callback.Url)
      if err != nil{
         beego.Error(err)
      }
      body, err :=ioutil.ReadAll(resp.Body)
     if err != nil{
         beego.Error(err)
     }
      deferresp.Body.Close()
      if err != nil{
         beego.Error(err)
      }
      f, err :=os.create(".\\attachment\\onlyoffice\\"+onlyattachment.FileName)
      if err != nil{
         beego.Error(err)
      }
      deferf.Close()
      _, err =f.Write(body)
      if err != nil{
         beego.Error(err)
      } else {
         err =models.UpdateOnlyAttachment(idNum)
         if err !=nil {
            beego.Error(err)
         }
      }
      c.Data["json"]= map[string]interface{}{"error": 0}
      c.ServeJSON()
   }
}
 


engineercms的文檔管理: 
 
大神解讀在Windows或Liunx系統上使用ONLYOFFICE協作編輯文檔開發

word文件協作效果:

大神解讀在Windows或Liunx系統上使用ONLYOFFICE協作編輯文檔開發



PowerPoint文檔演示:

大神解讀在Windows或Liunx系統上使用ONLYOFFICE協作編輯文檔開發


Excel表格在線編輯演示:

大神解讀在Windows或Liunx系統上使用ONLYOFFICE協作編輯文檔開發

分享到:

相關文章
關于深網

“贛州深網www.389034.tw”是贛州深網科技有限公司所擁有的互聯網服務品牌。公司主要致力于向廣大用戶提供優質的互聯網基礎服務。公司擁有一支由資深技術專家、優秀的管理、服務人才組成的運營團隊,有著多年的互聯網運營服務從業經驗。公司先后與國內多家知名互聯服務企業合作,取得了矚目的成績,資源、技術優勢得到進一步提升。深網為企業、政府、組織提供網站開發設計、域名注冊、網站主機、網站SEO優化、微站、公眾號平臺、小程序開發等。 聯系電話:137-6633-3304

案例分享
立即咨詢  
? 澳洲幸运8历史开奖