可以用哪些软件来批量生成文档?

news2024/9/22 15:42:09

作者:天哥

什么是文档生成器?

先举一个实际业务场景。

无论是微软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在向终端消费者收费的同时,也向开发端的开发者收费,我们开发技术人员都是高智商者,在考虑技术路线选型时候也应该同时在各家官网详细查看研究价格因素。

还有其它一些与技术关系不大但是影响我们选择的其它因素,都需要我们全面感知灵活决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨境电商公司Linkage Global申请750万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,跨境电商公司Linkage Global近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(LGCB),Linkage Global计划通过此次纳…

Linux编程之线程池的设计与实现

Linux编程之线程池的设计与实现(C98) 代码 假设服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是空间换时间, 即“浪费”服务器的硬件资源,以换取其运行效率。 提升服务器性能的一个重要方法就是…

基于YOLOv2和传感器的多功能门禁系统

文章和项目源码已经归档至【Github仓库:https://github.com/timerring/face-recognition-door 】或者公众号【AIShareLab】回复 人脸识别门禁 也可获取。 文章目录 1.系统制作方案概述1.1系统设计的立意1.2系统的主要组成1.3系统的制作方案1.3.1制作方案框图1.3.2制…

基于ntchat的微信群聊同步机器人

微信群有500人上限的限制,建立多个群的话又有信息无法互通的不便,此机器人通过自动将消息转发到同一个同步组内的所有群,消除这一不便性,间接达成扩大群成员数的目的。 效果演示: 项目地址: https://gith…

vue-ueditor-wrap 中获取光标所在的位置,插入文本内容

1.背景 因项目需要,在富文本编辑框中可以设置样式,并且可以在内容光标所在的位置插入文本内容。 2.项目中使用 vue-ueditor-wrap 请跳转至以下链接进行查看 vue项目中使用vue-ueditor-wrap_理想和远方_在路上的博客-CSDN博客 3.获取光标所在的位置&a…

闲鱼自动化软件——筛选/发送系统 V22已经测试完毕

更新 因为闲鱼版本更新,以及闲鱼整个程序维护记录,又增加了一些优化和提升的代码,所以又一次在整体上更新了一版闲鱼的此款软件。 主要更新点: 1、添加显示自定义按钮,可以自动显示最新数据,也可以手动翻…

巨人互动|Google海外户Google+有什么用途

Google是Google推出的一项社交网络服务,类似于Facebook和Twitter。它为用户提供了一个分享和交流的平台,具有许多不同的用途。 首先,Google可以让用户轻松地与朋友、家人、同事和其他人建立联系。通过添加他人为好友或加入共同兴趣的群组&am…

第二证券:华为5.5G迎来新突破 政策加码利好银行估值

昨日,沪指盘中维持窄幅震动走势,深成指、创业板指弱势下探,创业板指再创逾3年新低;到收盘,沪指微涨0.11%报3126.55点,深成指跌0.57%报10197.59点,创业板指跌0.78%报2011.88点;两市算…

C++:vector中pair的排序方法

前言 有时我们需要往 vector 容器中插入 “键值对(pair<int, int>)” 数据&#xff0c;同时又需要按第二个或者第一个进行排序。如上的问题可以借助 STL 的 sort 完成。 程序 1. 向算法传递函数 static bool cmp(const pair<int, int>& a, const pair<int…

使用原生的js实现分享功能,代码非常精简

分享一个原生的js实现移动端分享功能&#xff0c;希望大家喜欢。 兼容性&#xff1a; 实现代码&#xff1a; function share(){ if (!navigator.share) { alert("您当前浏览器不支持分享&#xff01;"); } else { navigator.share({title: {$title},text: {$introd…

Linux操作系统(四):内存管理组件

该部分的学习框架如下&#xff1a; 了解基本内存管理概念&#xff1a;物理内存、虚拟内存、地址空间等。学习虚拟内存的概念、作用和原理。了解虚拟内存是如何将物理内存和进程的地址空间分开管理的&#xff0c;以及它如何提供了更大的地址空间和更好的内存管理。内存分段&…

管理方法论:4. 一对一沟通——了解真实情况

团队人越多&#xff0c;管理者了解真实情况就越困难&#xff0c;为什么&#xff1f; 缺乏安静的、可以专注于沟通的环境。有些话不能跟太多人说&#xff0c;尤其是负面的想法和意见。有些人本来就内向、被动&#xff0c;其他人说话时&#xff0c;自己往往习惯于听&#xff0c;…

java和fastjson

1.java是如何跨平台通信的 java--->class字节码--->jvm虚拟机运行 2.使因为jvm只会读文件名 如果不一致 则无法找到文件 3.main 函数说明java代码的接口 被使用 4.java和class后缀的区别 java是当前编写的代码文件 class是编译后的文件 5.void 没有返回值 这…

报警icon图闪动效果实现css动画

<div class"right-content" style"padding-left:10px; padding-top: 10px;"><div class"text-nowrap">离线摄像仪</div><div class"number-all" :style"{ color: cameraOffline > 0 ? red : #e7b215 }&…

许可分析 license分析 第六章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 软件许可证变更管理&#xff1a;建立合适的软…

使用TreeMap数据结构解决独特的搜索需求

TreeMap是Java集合&#xff0c;它以有序的键及其相应的值的形式组织数据。它自JDK 1.2以来就已经存在。在内部&#xff0c;TreeMap使用红黑树来组织数据&#xff0c;这是一种自平衡二叉树。TreeMap中的键是唯一的标识符&#xff0c;默认情况下&#xff0c;TreeMap会根据键的自然…

医院如何提升设备维护效率?智能工单管理系统有什么用?

目前&#xff0c;许多大型医院楼宇面积庞大&#xff0c;人员流动频繁&#xff0c;各科室医疗设备繁多&#xff1b;不管是基础硬件设施、还是暖通、电力系统&#xff0c;日常都处于高频使用、运转状态。维修、维护需求多、压力大&#xff0c;存在以下诸多的问题。 1、报修难点  …

使用 Microchip SAM9X60 OTP 存储板卡的MAC地址和序列号

1. 介绍 SAM9X60 处理器有部分OTP&#xff08;One Time Programming&#xff09; Aera 可用于存储user data&#xff0c;这样的话我们就可以将板卡 MAC Address和 SN 序列号写到固定的OTP User Area中。 为什么要使用 OTP 区域存储MAC地址和序列号呢&#xff1f;答案是为了省钱…

C++内存池(1)理论基础及简单实现

一、内存池原理 1、我们先用生活中的例子来解释什么是内存池&#xff1a; &#xff08;1&#xff09;每个月月底钱花完时&#xff0c;或者急需要用钱时&#xff0c;你就打电话给你父母要钱&#xff0c;然后父母把钱通过微信或支付宝转给你。这种方式&#xff0c;每次要用钱…

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型 简飞的飞友们&#xff01;我并没有弃坑&#xff0c;只不过我不是你们想象的那样设计飞机。我之前写过一篇图文讲解如何在谷某地球里规划飞行航线&#xff1a; 手把手教你驾驶西锐SR-22小飞机在美国大峡谷中穿行https://b…