本文是與OnlyOffice合作創建的。感謝您支持使SitietPoint成為可能的合作夥伴。 >每當我們發現自己試圖為應用程序添加任何復雜功能時,就會出現:“我應該自己滾動嗎?”除非您的目標是構建該功能,否則答案幾乎總是直接的“否” 。
>您需要的東西可以幫助您盡快獲得MVP,而實現這一目標的最佳方法是使用一個完整的開箱即用解決方案,可以幫助您節省時間轉彎,轉化為節省開發成本。>我假設您還在這裡,因為上述引起了您的共鳴。因此,既然我們已經同步了,我想在本文中向您展示的是將OnlyOffice集成到您的Web應用程序中的容易。
>
鑰匙要點
>開發人員版本不僅為您提供了足夠的自由來將編輯器集成到應用程序中,而且還帶有“白色標籤”選項,可讓您完全自定義編輯者在自己的品牌下使用它們。
>要與您的Web應用集成,您首先需要下載Onlyoffice Docs(用文檔服務器打包)並在本地服務器上進行設置。
>安裝後,您可以開始實現在服務器上處理文檔的請求。 OnlyOffice為.NET,Java,Node.js,PHP,Python和Ruby提供了一些非常好的示例。
>>您可以下載文檔服務器和首選示例,並立即在計算機上嘗試。
>我將演示如何開始集成到您的應用程序中。為此,我們將使用Node.js和Express的一個非常簡單的示例。我不會詳細介紹實現,我會列出裸露的骨頭必需品,讓您填寫空白以構建一個可靠的可擴展系統。我有一個具有以下結構的應用程序:
>我們將使用公共/文檔文件夾存儲文檔。 app.js文件是我們的Express App代碼所在的位置,index.html是我們顯示文檔的位置。我在文檔文件夾中刪除了一個sample.docx文件。
>- node_modules - public - backups - css - main.css - documents - sample.docx - javascript - main.js - samples - new.docx - new.xlsx - new.pptx - app.js - index.html - package.json公共/示例中的樹文件是我們在“創建”新文件時復制的空白文件。
您稍後會看到的備份文件夾不僅可以幫助我們保留以前版本的備份,而且還可以幫助我們在修改文檔後為文檔生成唯一的標識符。
>
>我們正在做的是將文件作為localhost:3000/documents/fileName。
>我還領先於自己,並增加了Syncrequest,FS和BodyParser。這些目前不相關,但我們稍後會使用它們。
><span>const express = require('express'); </span><span>const bodyParser = require("body-parser"); </span><span>const path = require('path'); </span><span>const fs = require('fs'); </span><span>const syncRequest = require('sync-request'); </span> <span>const app = express(); </span> app<span>.use(bodyParser.json()); </span>app<span>.use(bodyParser.urlencoded({ extended: false })); </span> app<span>.use(express.static("public")); </span> app<span>.get("/", (req<span>, res</span>) => { </span> res<span>.sendFile(path.join(__dirname, "/index.html")); </span><span>}); </span> <span>const port = process.env.PORT || 3000; </span>app<span>.listen(port, () => console.log(<span>`App listening on http://localhost:<span>${port}</span>`</span>)); </span>>提取文檔
要顯示可用的文檔,我們需要獲取所有文件名的列表並將其發送給客戶。我們將為此創建 /文檔路由:
創建文檔
app<span>.get("/documents", (req<span>, res</span>) => { </span> <span>const docsPath = path.join(__dirname, "public/documents"); </span> <span>const docsPaths = fs.readdirSync(docsPath); </span> <span>const fileNames = []; </span> docsPaths<span>.forEach(filePath => { </span> <span>const fileName = path.basename(filePath); </span> fileNames<span>.push(fileName); </span> <span>}); </span> res<span>.send(fileNames); </span><span>}); </span>刪除文檔
>
app<span>.post("/create", async (req<span>, res</span>) => { </span> <span>const ext = path.extname(req.query.fileName); </span> <span>const fileName = req.query.fileName; </span> <span>const samplePath = path.join(__dirname, "public/samples", "new" + ext); </span> <span>const newFilePath = path.join(__dirname, "public/documents", fileName); </span> <span>// Copy the sample file to the documents folder with its new name. </span> <span>try { </span> fs<span>.copyFileSync(samplePath, newFilePath); </span> res<span>.sendStatus(200); </span> <span>} catch (e) { </span> res<span>.sendStatus(400); </span> <span>} </span><span>}); </span>這個超級簡單。我們將刪除文件並發送200個狀態代碼,以讓用戶知道一切都很好。否則,他們將獲得400個狀態代碼。
- node_modules - public - backups - css - main.css - documents - sample.docx - javascript - main.js - samples - new.docx - new.xlsx - new.pptx - app.js - index.html - package.json>這是一個棘手的問題,因為當文件由編輯器保存時,文檔服務器將使用它。如您所見,我們正在返回“ {” error”:0}“,它告訴服務器一切都很好。
>編輯器關閉時,該文件的當前版本將在public/backups/filename-History/中備份,而當前時間則以毫秒為單位作為文件的名稱。如您所見,我們將在前端使用該文件的名稱。
> 在此示例中,我們每次保存新的備份時都會替換上一個備份。您將如何保留更多備份?
>提取備份
在這裡,我們確保存在該文件的備份文件夾,並返回該文件夾中所有備份文件的數組。是的,這將幫助您完成為單個文件保留更多備份的任務。我無法繼續為您做所有的工作!
><span>const express = require('express'); </span><span>const bodyParser = require("body-parser"); </span><span>const path = require('path'); </span><span>const fs = require('fs'); </span><span>const syncRequest = require('sync-request'); </span> <span>const app = express(); </span> app<span>.use(bodyParser.json()); </span>app<span>.use(bodyParser.urlencoded({ extended: false })); </span> app<span>.use(express.static("public")); </span> app<span>.get("/", (req<span>, res</span>) => { </span> res<span>.sendFile(path.join(__dirname, "/index.html")); </span><span>}); </span> <span>const port = process.env.PORT || 3000; </span>app<span>.listen(port, () => console.log(<span>`App listening on http://localhost:<span>${port}</span>`</span>)); </span>>在瀏覽器中打開一個文檔
>
>我們將看到如何使用OnlyOffice文檔在瀏覽器中直接打開文檔。首先,我們將創建一個簡單的html文件:
>
最後但並非最不重要的一點是,有腳本標籤,我們導入前端javascript和main.js文件,我們將在其中全局訪問docsapi對象。app<span>.get("/documents", (req<span>, res</span>) => { </span> <span>const docsPath = path.join(__dirname, "public/documents"); </span> <span>const docsPaths = fs.readdirSync(docsPath); </span> <span>const fileNames = []; </span> docsPaths<span>.forEach(filePath => { </span> <span>const fileName = path.basename(filePath); </span> fileNames<span>.push(fileName); </span> <span>}); </span> res<span>.send(fileNames); </span><span>}); </span>> css
>在進行編碼之前,讓我們與一些CSS結束佈局,以使我們的應用程序更可用且不那麼醜陋。將以下內容添加到main.css:
顯示可用文檔
在頂部,我們正在獲取查詢參數,以找出是否打開文件。如果是,我們將調用EditDocument函數。不用擔心,我們稍後會創建一個。
>>如果我們不打開文件,我們要顯示可用文件和控件的列表以創建更多。在ListDocuments中,我們首先確保隱藏佔位符並清除列表,以確保我們重新創建它。然後,我們調用我們之前創建的 /文檔路由以獲取所有文件,通過它們迭代並創建相應的元素。我們將用文件名確定每個元素作為ID。這樣,我們稍後可以輕鬆地檢索它們。
請注意,我們正在調用AddDocumentHTML函數,稍後我們將重複使用以添加新文件。
對於這些文檔中的每個文檔,我們還調用了我們在底部定義的Opentocument,並且在cross符號上我們稱為deleteDocument,我們將接下來定義。刪除文檔
創建文檔
- node_modules - public - backups - css - main.css - documents - sample.docx - javascript - main.js - samples - new.docx - new.xlsx - new.pptx - app.js - index.html - package.json
非常簡單。我們提示名稱,將其稱為 /創建路由為文件名參數,如果狀態返回為200
<span>const express = require('express'); </span><span>const bodyParser = require("body-parser"); </span><span>const path = require('path'); </span><span>const fs = require('fs'); </span><span>const syncRequest = require('sync-request'); </span> <span>const app = express(); </span> app<span>.use(bodyParser.json()); </span>app<span>.use(bodyParser.urlencoded({ extended: false })); </span> app<span>.use(express.static("public")); </span> app<span>.get("/", (req<span>, res</span>) => { </span> res<span>.sendFile(path.join(__dirname, "/index.html")); </span><span>}); </span> <span>const port = process.env.PORT || 3000; </span>app<span>.listen(port, () => console.log(<span>`App listening on http://localhost:<span>${port}</span>`</span>)); </span>>在OnlyOffice文檔中打開文檔
>現在我們需要定義editDocument函數。將以下代碼添加到main.js:
因此,我們添加了三個功能。讓我們首先關注最後兩個。 (我們將稍後討論編輯文檔。)
>app<span>.get("/documents", (req<span>, res</span>) => { </span> <span>const docsPath = path.join(__dirname, "public/documents"); </span> <span>const docsPaths = fs.readdirSync(docsPath); </span> <span>const fileNames = []; </span> docsPaths<span>.forEach(filePath => { </span> <span>const fileName = path.basename(filePath); </span> fileNames<span>.push(fileName); </span> <span>}); </span> res<span>.send(fileNames); </span><span>}); </span>生成鍵也將通過生成密鑰來為我們提供幫助。這是用於服務文檔識別的唯一文檔標識符。它的最大長度為20,沒有特殊字符。這就是技巧:每次保存文檔時都必須再生。你看到這要去哪裡了嗎?確切地!我們將從備份文件名中獲利以生成我們的鍵。
> 如您所見
>如果您支持更多備份,該功能必須更改該功能?[逃跑]
getDocumentType將返回文本,電子表格或演示文稿。只有此功能才能知道要打開哪個編輯。
editdocument是我們在這裡的目的。這就是您一直在等待的。在這裡,我們實例化文檔對像傳遞了我們佔位符DIV的ID和帶有一堆配置的對象。 >
>
在頂部,我們有文檔字段,該文檔字段採用一個對象,該對象包含有關我們要打開的文檔的信息。> 然後,我們有DocumentType,正如我們之前看到的,可以是文本,電子表格或演示文稿。
>>在那是EditorConfig對象,它使您可以設置諸如Spellcheck,unit和Zoom之類的內容。在這種情況下,我們只是使用callbackurl,該callbackurl是文檔服務器將用來保存文件的 /跟踪路由的URL。
結論>我們已經達到了終點,希望您能夠學習如何與您的Web應用程序設置和集成。我們有很多拋棄的東西,例如權限,共享,自定義以及您可以使用的許多其他事情。
好吧,我將在下一個見到你。同時,請繼續編碼並記住在您的情況下玩得開心!
>
經常詢問的問題(常見問題解答)有關使用OnlyOffice將辦公室功能添加到您的Web應用程序
>如何將OnlyOffice集成到我現有的Web應用程序中? 將OnlyOffice集成到您現有的Web應用程序中涉及幾個步驟。首先,您需要安裝僅是OnlyOffice的核心的Onlyoffice Document Server。這可以使用推薦方法或手動的Docker完成。安裝了文檔服務器後,您可以使用僅Onewoffice API將其集成到Web應用程序中。 API提供了一組使用文檔,電子表格和演示文稿的方法。您可以使用這些方法打開,編輯和保存文檔在您的Web應用程序中。 在我的Web應用程序中使用僅使用僅限的文檔是什麼好處?它允許用戶直接在應用程序中創建,查看和編輯文檔,而無需下載或使用單獨的程序。這可以大大提高用戶體驗和生產力。 OnlyOffice還支持實時協作,使多個用戶可以同時處理同一文檔。此外,OnlyOffice支持廣泛的文檔格式,包括Microsoft Office格式和OpenDocument格式。>
>我如何自定義單獨的office接口?
是安全的嗎?它使用SSL加密來保護運輸中的數據,並可以控制誰可以訪問您的文檔。此外,OnlyOffice是開源的,這意味著其代碼可公開可供審查和審查。 > OnlyOffice支持實時協作嗎?
是否有一個社區的OnlyOffice Developers? Beansoffice開發人員的社區。該社區為開發人員提供了一個論壇,以提出問題,分享技巧和竅門以及在項目上進行協作。對於使用OnlyOffice開發的任何人來說,這都是一個很好的資源。
>以上是使用OnlyOffice將辦公功能添加到您的Web應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!