本文是与OnlyOffice合作创建的。感谢您支持使SitietPoint成为可能的合作伙伴。 >每当我们发现自己试图为应用程序添加任何复杂功能时,就会出现:“我应该自己滚动吗?”除非您的目标是构建该功能,否则答案几乎总是直接的“否”。
>您需要的东西可以帮助您尽快获得MVP,而实现这一目标的最佳方法是使用一个完整的开箱即用解决方案,可以帮助您节省时间转弯,转化为节省开发成本。>我假设您还在这里,因为上述引起了您的共鸣。因此,既然我们已经同步了,我想在本文中向您展示的是将OnlyOffice集成到您的Web应用程序中的容易。
>
钥匙要点
- 唯一的office集成可以直接在网络应用程序中对文档的创建,编辑,删除和跟踪,从而提高用户互动和生产力而无需外部应用程序。
- >实时协作在OnlyOffice中得到了支持,允许多个用户同时编辑文档,并将彼此的更改实时。 >
- 集成过程旨在简单明了,旨在帮助开发人员快速和经济有效地实现最低可行的产品(MVP),并提供充足的文档和社区支持以提供帮助。
- 什么是唯一的?
- 从他们的网站:
-
- 办公室套件有多个版本。在本文中,我们将使用开发人员版,因为我们想将编辑器集成到该应用程序中,后来将作为云服务或本地安装交付给许多用户。
>
>开发人员版
>开发人员版本不仅为您提供了足够的自由来将编辑器集成到应用程序中,而且还带有“白色标签”选项,可让您完全自定义编辑者在自己的品牌下使用它们。
>>文档服务器集成
要与您的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>>提取文档
要显示可用的文档,我们需要获取所有文件名的列表并将其发送给客户。我们将为此创建 /文档路由:
创建文档
>一开始我们只会有一个示例文档,但这一点都不有趣。让我们添加A /创建路由以帮助我们添加一些文件。我们只需将文件名取下并将相应的模板复制到带有新名称的公共/文档文件夹中:
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个状态代码。
保存文档
到目前为止,我们可以打开文档进行编辑,但是我们无法保存更改。让我们现在就这样做。我们将添加A /Track路由以保存我们的文件:
- 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/中备份,而当前时间则以毫秒为单位作为文件的名称。如您所见,我们将在前端使用该文件的名称。
> 在此示例中,我们每次保存新的备份时都会替换上一个备份。您将如何保留更多备份?
>提取备份
>我们需要一种方法来获取特定文件的备份,因此我们添加了A /备份路由来处理以下操作:
在这里,我们确保存在该文件的备份文件夹,并返回该文件夹中所有备份文件的数组。是的,这将帮助您完成为单个文件保留更多备份的任务。我无法继续为您做所有的工作!
><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:
显示可用文档
>以此为止,我们准备开始编码前端。我们将首先列出文档文件夹中的文件。转到main.js并添加以下代码:
>在顶部,我们正在获取查询参数,以找出是否打开文件。如果是,我们将调用EditDocument函数。不用担心,我们稍后会创建一个。
>>如果我们不打开文件,我们要显示可用文件和控件的列表以创建更多。在ListDocuments中,我们首先确保隐藏占位符并清除列表,以确保我们重新创建它。然后,我们调用我们之前创建的 /文档路由以获取所有文件,通过它们迭代并创建相应的元素。我们将用文件名确定每个元素作为ID。这样,我们稍后可以轻松地检索它们。
请注意,我们正在调用AddDocumentHTML函数,稍后我们将重复使用以添加新文件。
对于这些文档中的每个文档,我们还调用了我们在底部定义的Opentocument,并且在cross符号上我们称为deleteDocument,我们将接下来定义。删除文档
要删除我们的文档,如果用户确定在继续打电话 /删除路由并在该文件上进行核电,我们将提示他们。我们没有浪费对我们的API的另一个呼叫,而是检查返回的状态是否为200直接删除DOM元素:
创建文档
- 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和带有一堆配置的对象。>
> DOCEDITOR CONFIGURATION
到目前为止,我向您展示的是实例化文档的最低选项。您应该查看文档中的“高级参数”部分,以查看如何从所有不同选项中获利。同时,让我带您完成基础知识。>
在顶部,我们有文档字段,该文档字段采用一个对象,该对象包含有关我们要打开的文档的信息。> 然后,我们有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格式。>
我可以将OnlyOffice与React一起使用? OnlyOffice API提供了一个React组件,您可以使用该组件将OnlyOffice集成到您的React应用程序中。该组件提供了一组使用文档的道具和方法。您可以使用这些道具和方法在您的React应用程序中打开,编辑和保存文档。
>>我如何自定义单独的office接口?
是安全的吗?它使用SSL加密来保护运输中的数据,并可以控制谁可以访问您的文档。此外,OnlyOffice是开源的,这意味着其代码可公开可供审查和审查。> OnlyOffice支持实时协作吗?
>
>我可以在OnlyOffice中使用哪些类型的文档?文档格式,包括Microsoft Office格式(例如.docx,.xlsx和.pptx)和Opendocument格式(例如.odt,.ods和.odp)。它还支持其他格式,例如.txt和.csv。>我可以在移动设备上使用OnlyOffice吗?>是的,只有Onlyoffice响应迅速并且可以在移动设备上使用。这意味着用户可以在其智能手机或平板电脑上创建,查看和编辑文档,从而在设备上提供无缝的体验。
是否有一个社区的OnlyOffice Developers? Beansoffice开发人员的社区。该社区为开发人员提供了一个论坛,以提出问题,分享技巧和窍门以及在项目上进行协作。对于使用OnlyOffice开发的任何人来说,这都是一个很好的资源。
>以上是使用OnlyOffice将办公功能添加到您的Web应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。