作者:天哥
什么是文档生成器?
先举一个实际业务场景。
无论是微软Office还是ONLYOFFICE,还是其它Office软件,创建文档编写文档,其工作主要都是我们人工完成的,打开软件,新建文档,或者打开一个已有文档,切换到中文输入法,开始输入内容,这是正常的工作方式。
另外有一种场景,我们需要批量创建统一格式的大量文档文件,内容已经预先定义好的文件,比如各类公文或者批量处理表单,那就不适合手工编写,而适合于编写程序,用程序自动化的从已有的数据生成文档。
举一个例子,本文作者自己先署名为天哥,如图所示:
现在写一个脚本程序仅仅需要7行代码,自动改自己署名为宁姐,创建一个ONLYOFFICE的文档生成器所使用的脚本文件SAR.docbuilder:
// replace 天哥 with 宁姐
builder.OpenFile("文档生成器.docx");
var oDocument = Api.GetDocument();
var oParagraph;
oParagraph = oDocument.GetElement(0);
oDocument.SearchAndReplace({"searchString": "天哥", "replaceString": "宁姐"});
builder.SaveFile("docx", "文档生成器.docx");
builder.CloseFile();
然后使用ONLYOFFICE的文档生成器来执行
'D:\Program Files\ONLYOFFICE\DocumentBuilder\docbuilder.exe' .\SAR.docbuilder
执行之后就可以看见已经成功的自动替换了文档中所有的天哥为宁姐了:
这只是一个非常简单的示例,再借助javascript语言或bash编程,就可以扩展自动化的批量处理大量的文档或者在应用服务器端响应用户的操作生成对应的文档。
文档生成器可以部署在云端服务器上,辅助企事业云办公自动处理公文流转,也可以部署在终端个人电脑上辅助个人办公文档处理。
这是一类开发工具,目前,可以作为文档生成器使用的有如下选择。
微软MicroSoft的Open XML SDK与Office Open XML文档标准
现在广泛使用的是docx、pptx、xlsx后缀名的文件格式,这些就是Office Open XML标准格式的文档,该格式标准是开放公开的,对比于之前微软的doc、ppt和xls是不同的,之前的这一套是微软自己封闭的二进制的格式,因此,在现在的OpenXML文档标准开放公开的情况下,理论上,任何开发组织和个人,都可以在解读该标准规范的基础之上,开发自己的文档生成器,甚至是Office办公套件。OpenXML格式的开发者微软做为办公软件执牛耳者,自身开发了Open XML SDK开发工具包,并将其开源放置到GitHub上,为其他开发者提供示范。
Microsoft Open XML Format SDK包含一套托管代码库用于编程以创建、操纵Office Open XML文件。并不用于代替Microsoft Office Object Model,也不提供文件格式的顶层抽象。使用Open XML SDK必须理解文档格式结构。对Word文档不提供诸如layout功能;对Excel文档,不提供诸如重新计算、数据刷新等功能。
目前最高版本2.5用于.NET4.0应用程序,开源在GitHub上。
Open-XML-SDK
其官方帮助文档手册的英文版本和中文版本在微软网站上:
Welcome to the Open XML SDK 2.5 for Office
欢迎使用 Open XML SDK 2.5 for Office
对应的,微软在GitHub上也提供了这个开发帮助文档手册,仅有英文版:
Open XML SDK 2.5 Table of contents
微软Open XML SDK开发工具仅支持Windows操作系统,.NET Framework版本 4.0,以及微软Visual Studio。
关于微软的Open XML SDK开发工具,这里不准备详细讲解开发细节,以本文开头部分的查找替换例子为例,在微软的Open XML SDK中开发这个功能,可以参考微软的这个帮助页面:
How to: Search and replace text in a document part (Open XML SDK)
(Open XML SDK) 搜索和替换文档部件中的文本
谨慎提醒:微软官网的所有中文页面均为机器翻译,只能远观不能近看,建议阅读英文版本。
ONLYOFFICE DOC Builder文档生成器
本文开头部分的示例就是使用ONLYOFFICE文档生成器编写。
ONLYOFFICE文档生成器是可以开发应用软件来修改或创建DOCX、XLSX、PPTX或PDF格式文档,且无需运行Microsoft Office。
ONLYOFFICE文档生成器附带双许可证模式。这意味着只要您遵循GNU AGPL v.3许可证,就可以使用GitHub上提供的ONLYOFFICE开源解决方案。为了保护您的知识产权和获取专业支持,您必须拥有Commercial License。
通过ONLYOFFICE文本生成器,您可以为每一个文档创建简单脚本,无论是新文件还是您需要打开并修改的旧文件。您再也无需像使用其他生成器一样,在每次更改时都编译应用程序。
ONLYOFFICE文档生成器支持所有常见的文档格式,可打开DOC、DOCX、ODT、RTF、TXT、XLS、XLSX、ODS、CSV、PPT、PPSX、PPS、ODP和PPTX,并保存为DOCX、ODT、XLSX、PPTX或PDF。
官方网站入口在这里:
用于高级文档处理的SDK
在该页面可以在线体验ONLYOFFICE文档生成器功能:
从文档、电子表格、演示文稿、表单、pdf文件中选择一个,即可看到展示的代码,点击结果文档按钮,即可下载由该代码所生成的文档到本地来查看。
ONLYOFFICE文档生成器是开源软件,在Github上开放源代码:
DocumentBuilder
下载安装
从官网可以进入下载页面:
下载 ONLYOFFICE文档生成器,用于高级文档处理的 SDK
ONLYOFFICE文档生成器支持Windows、Linux操作系统,可以不依赖于ONLYOFFICE及任何其它Office软件,而独立运行。
下载后得到安装文件docbuilder_x64.exe,安装后在安装路径内得到如下文件:
其中的docbuilder.exe就是我们用来执行文档生成过程的可执行文件,建议将其安装路径添加到操作系统的path路径里面去
set path="d:\Program Files\ONLYOFFICE\DocumentBuilder";%path%
使用ONLYOFFICE文档生成器
ONLYOFFICE文档生成器提供一个JavaScript API,具有完善的文档记录,并且易于使用。从ONLYOFFICE的库中选择适当的方法和类,或者选择常用的JavaScript方法更改某些元素格式设置属性。
无论您使用何种语言编写应用程序,文档生成器都可以与其相集成。目前支持:
- .Net(C# MVC)
- .Net (C#)
- Node.js
- PHP
- Ruby
对于信创类企业,如果需要在自己的品牌下为终端用户带来先进的处理文档机会,就可以选择文档生成器作为ONLYOFFICE文档开发者版的一部分。
使用文档
使用ONLYOFFICE文档生成器,需要学习其使用文档:
ONLYOFFICE Document Builder
在使用文档首页,提供一个在线的生成器脚本解析执行器,开发者可以把自己写的简单代码上传运行测试,查看所生成的文档内容
两种开发路线
- 将这个库集成到你自己的项目代码中,请参考手册中集成的部分。
- 使用所提供的二进制的可执行脚本解析执行器,来进行从零开始的学习,无需源代码开始开发应用程序,而直接开始写脚本来运行功能。
正如本文开头部分的示例,该脚本解析执行器的运行非常简单:
docbuilder mydocument.docbuilder
其中mydocument.docbuilder就是你自己编写的文档生成脚本,其本质是一个javascript程序文件,因此建议在VS Code中设置为将.docbuilder后缀名关联为javascript程序语法高亮配色主题:
在大型项目中,在使用脚本开发调试无误之后,再把文档生成功能使用第一种开发路线开发固化在底层C++代码中获得更高的运行效率。
开发示例
ONLYOFFICE文档生成器几乎可以完成人工在ONLYOFFICE编辑器中编写文档的任何工作,在其开发文档网站提供了众多示例:
Getting started
底层C++语言接口
ONLYOFFICE文档生成器的一个强大功能就是,提供了底层的C++接口:
C++ wrapper
开发者可以在开发自己的工业软件中,使用ONLYOFFICE文档生成器,来对办公文档进行各种操作,具体细节这里略去,请参考上述链接。
搜索技能
开发者最在意的是搜索功能,一般的开发工具包都包含海量的函数方法,程序员使用的开发文档的方式基本上就是只看前三章基础入门部分之后,后面的函数库细节部分全靠搜索功能,在ONLYOFFICE的开发者网站上,提供了搜索功能,例如在本文开头的查找替换功能脚本示例的开发中,笔者先行在其官方网站上搜索:
在搜索框输入英文replace,搜索结果第二条就是所要查找的函数方法。
永中Office客户端开发
永中Office采用了和微软、ONLYOFFICE完全不同的开发技术路线。永中提出了的是永中开放平台,其中包括云预览、云编辑、格式转换和永中Office客户端开发四大开发扩展功能。前三者主要是针对云端服务器端的开发,需要向永中申请或付费购买开发者权限。
能够提供对办公文档的打开编辑操作的是其永中Office客户端开发部分,其内核采用Java开发,扩展开发也采用java语言开发,一次扩展开发,既可以在Windows、Linux各个发行版上跨平台使用。
永中Office客户端开发API包的开发与运行,都依赖于已经安装永中Office的环境。
同样拿本文开头部分的查找替换示例为例,在永中Office客户端开发部分里的文字处理API中,找到find类,里面有execute方法,该方法的参数里面有查找后替换的操作,官方文档如下截图所示:
金山WPS
金山有WPS和金山Office两条线,前者是正牌WPS,后者金山OFFICE是纯在线的Web版本的Office网络应用,其扩展应用开发技术路线也不尽相同。
WPS开放平台
也采用了javascript编程语言开发程序,开发和运行都需要依赖于安装的WPS软件。
回到查找替换的例子,笔者并未在金山的官方开发手册中查找到相关API功能函数:
WebOffice开放平台
WebOffice开放平台只针对web在线版Office进行开发,因此,开发者无论是为企业还是个人开发,都需要申请并经过金山的严格审核并且付费进行开发,且开发后的应用功能与数据内容都受到严格的监管。
回到查找替换的例子,可以在其开发手册中方便的搜索查找出来相关函数方法的详细介绍:
其它
还有谷某的纯在线Office和微软的在线版Office,鉴于使用不方便这里不再介绍。
总结
这里介绍的几个用于文档生成器的开发工具,是几个Office类软件的核心大厂的开发工具,市面上Office类软件很多,但很多都是采用这几个大厂的内核来封装售卖的不足为论,Office软件领域真正玩家就只是本文所列这几个拥有核心技术的大厂,它们既然是核心玩家,其文档生成器开发工具,就基本上都是足够一般开发使用的,不会有什么短板太明显的缺点。我们在选择的时候,基本上不用关心所谓好坏的问题,而应该从其它方面来考虑。
一方面是技术路线的选择,比如要以java为主要编程语言工具来开发集成文档生成器,那可以选择永中Office,而如果选择.net技术路线只适用Windows操作系统平台的话那就优先选择微软的SDK,而如果选择javascript开发友好的则可以选择金山的开发平台或ONLYOFFICE的文档生成器,而如果考虑跨平台适用性且选择C++底层开发优化性能的则优先选择ONLYOFFICE文档生成器。
另一方面的考虑是价格贵贱的选择,如前文所述,某些Office在向终端消费者收费的同时,也向开发端的开发者收费,我们开发技术人员都是高智商者,在考虑技术路线选型时候也应该同时在各家官网详细查看研究价格因素。
还有其它一些与技术关系不大但是影响我们选择的其它因素,都需要我们全面感知灵活决策。