1. 程式人生 > >如何在 Windows 上 使用 ONLYOFFICE 協作編輯文檔

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

doc git erro host nes view .net margin minutes

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

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

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語言編寫的跨平臺的可執行文件。如果運行出現閃退,則更改一下端口號。

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

docker run -i -t -d www.tianzunyule178.com-p 9000:80 onlyoffice/documentserver

-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 www.thd540.com= 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 :www.yongshiyule178.com=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(www.tianzunyule178.com)
_, 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()
}
}

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