天天看點

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

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

ONLYOFFICE Document Server提供文檔協作的服務功能,支援Word,Excel和PowerPoint的協作。但是

這裡

告訴我們,需要進行文檔管理和存儲的二次開發。

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服務來進行文檔協作。

協作的好處在于少了來回傳遞文檔,少了彙總的負責人,特别是十多人合作編寫文檔的時候,彙總的工作量大,容易出錯,任何人稍微修改一點,都要重新傳遞整個文檔,彙總後還要再次發給大家核對……。

協作也可以應用于校審流程,校核和審查直接在文檔上修改即可。

其他如月報的合作,工作任務表的更新:每個人的任務表要随時更新,除非用專業的任務管理軟體,否則用Excel表格的話,也是要負責人彙總更新表格,應付上司檢查。

會議紀要寫好了,把連結發給大家,有意見直接在上面修改補充。

投标要多人協作的話,用這個平台也是不錯的。

市場上

協作的平台不下幾十種,著名的如石墨,一起寫,騰訊文檔協作,Google Doc,office365,office online等,基本按人月收費,免費的有人數限制,并且想自己部署在區域網路的話也不大可能。

是以,我就在

ONLYOFFICE Document Server

基礎上用Golang語言開發了文檔管理和存儲功能,友善大家免費無限制任意部署的需求。

總的思路就是比如在區域網路的某台windows電腦上安裝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軟體不同而已。

第一步:确定電腦打開了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

可以用我做好的鏡像導入,已經設定好了字型,修正了幾個翻譯錯誤,可以省略第5步,直接到第6步。

用docker load < feionlyoffice.tar指令。

建議用離線的,

(Administrator@604TFALNDKDKJWCMINGW64 ~

$ dockerexport -o onlyoffice-`date +%Y%m%d`.tar 6df)

$ docker import  onlyoffice-20180220-import.tar onlyoffice/documentserver

離線的包在我的網盤中:

https://pan.baidu.com/s/1gf0ucuR

,離線包有4個:

第一個是onlyoffice_load.tar,替換好了字型,修正了幾個翻譯錯誤,是用commit指令生成新的包後save導出的。

第二個是onlyoffice-20180220-import.tar,這個包雖然裡面已經替換好了字型,但導入後暫時不知道怎樣運作起來。

第三個是onlyofficedocumentserver-load.tar這個包就是原生态的pull下來的鏡像打的包,用save指令打的包,用loader指令導入,然後運作,需要替換字型。

第四個是feionlyoffice.tar,這個包是用5.1.2版做成的,添加了字型,修改了幾處界面翻譯錯誤,修改了連接配接數限制。就是它太大了,上傳花了一個晚上。

應該下載下傳第四個檔案,放到docker指令行對應的目錄下,友善運作指令導入這個鏡像。一般在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

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 *.*

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

rm:cannot remove custom: Device or resource busy

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

custom

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

//進入容器内

$ 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

//退出容器

$ 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 run指令,要用docker start 容器id

完成後記得清理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

$ 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

下載下傳編譯好的二進制檔案

或者直接去

下載下傳軟體包,直接運作engineercms即可用浏覽器chrome通路127.0.0.1了,不用配置環境,因為它是golang語言編寫的跨平台的可執行檔案。如果運作出現閃退,則更改一下端口号。

(1)運作前要替換EngineerCMS\views\onlyoffice\onlyoffice.tpl中的3處IP,如果engineercms和docker安裝在同一個電腦上,那麼三個IP相同,見6.1節。

(2)docker toolbox通路前要按照第7節中的方法設定主控端(安裝docker的電腦)virtualbox的端口轉發。win10的windows docker不用設定端口轉發了。

有問題聯系我QQ504284,微信hotqin999

http://blog.csdn.net/hotqin888

6.1協作編輯頁面要根據你的情況進行修改(ip位址、漢化界面)

一定要用ip,不要用localhost、127.0.0.1之類的代替本機ip,本機調試要用192.168.99.100

EngineerCMS\views\onlyoffice\onlyoffice.tpl:

<!DOCTYPE html>

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

<head>

<title>fei-OnlyOffice</title>

</head>

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

<divid="placeholder" style="height: 100%"></div>

<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>

</body>

</html>

7、端口轉發

http://blog.csdn.net/maodou95838/article/details/78194830?locationNum=1&fps=1#0-qzone-1-51693-d020d2d2a4e8d1a374a433f596ad1440

前文第4節運作ONLYOFFICE DOCUMENT SERVER:

-d:背景運作 

-p 9000:80 :端口映射,前一個9000代表虛拟機的端口,後一個80代表docker容器的端口 

指令執行完成後,可以通過

http://192.168.99.100:9000

通路OO服務的歡迎界面。

這時隻能在你自己的機器上通路,同一個區域網路中的其他機器是不能通路的,原因是:Windows上的docker是運作在一個虛拟機裡面的,看官方給的圖: 

 要讓别的機器也通路到,需要配置一下虛拟機。設定如下: 

輕按兩下運作安裝docker toolbox生成的Oracle VMVirtualBox。

點選端口轉發:下圖中主機IP為安裝docker的電腦IP,主機端口為9000,子系統IP為192.168.99.100,子系統端口為9000。

這樣配置完成後,别的機器也可以通路docker 容器了。

下文的開發僅供興趣參考。

8、二次開發EngineerCMS

8.1 協作編輯頁面

<!DOCTYPE html>

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

<head>

<title>fei-OnlyOffice</title>

</head>

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

<divid="placeholder" style="height: 100%"></div>

<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>

</body>

</html>

8.2 協作頁面的儲存和回調

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()

}

}

原文位址 https://blog.csdn.net/hotqin888/article/details/79337881