如何用低代码实现批量导出PDF?
前言
事情是这样的,熟悉我们的朋友都知道,我司有一个为广大开发者朋友们提供学习帮助的地方,叫做新手训练营,具体的内容就是会针对初次接触葡萄城产品和技术的用户,通过 2-3 天的集中学习,采用直播授课的方式帮助用户快速上手产品,课后讲师会根据讲课内容布置相应的作业,对于所有提交作业的同学会颁发结业证书,同时对于作业优秀的同学还会颁发优秀学员证书,如下图所示:
但是随着新手训练营的日益火爆,参加学习的人也越来越多,证书的数量也就越来越多。而我们这边负责运营新手训练营的同事就遇见了这么一个问题:由于新手训练营的证书是手动制作的,每次在颁发证书的时候都要一个一个填每个人的姓名、训练营的期数和授课日期的时间,这样一来随着报名的人越来越多,证书的数量也就越来越多,手动one by one的制作工作量越来越大,耗时长,效率低。
为了解决这个问题,小编用我司的企业级低代码开发平台活字格做一个新手训练营证书打印系统。下面是这个系统的整体功能流程图:
系统整体功能流程图
表设计
在设计完初始的系统功能流程之后,小编首先开始进行数据库的表设计,因为新手训练营分为四个产品(Wyn、SpreadJS、ActiveReportsJS和活字格),所以按照产品的分类设计四张表,表明也分别是产品名,字段按照Excel中的字段分别设置为姓名、期数和日期。
界面设计
在设计完表之后,小编开始设计系统的界面,如下图所示,左侧是按照四个产品实现导航栏,点击之后就会跳转到相应的右边的详细界面。在详细界面中,中间部分的表格用来显示训练营的学员信息数据,表格的最左侧是选中行,在表格的上方有四个按钮,分别是查询、添加、删除和导入Excel四个按钮。在表格的下方是导出结业证书和导出优秀学员两个按钮。这两个按钮是用来分别导出选中行对应的证书,最下面是分页栏,当表中的信息过多时可以分页显示。
功能设计
导入Excel:将新手训练营的证书发放人员信息Excel表中的数据导入到系统中。
批量证书打印:可以指定任意的数据进行批量打印PDF证书,并存储在压缩包(压缩包名称为期数名称)中从浏览器上下载下来。
添加/查询/修改/删除数据:除了用Excel导入文件数据之外,还可以直接在系统中手动添加和修改数据,并批量删除选中的数据。除此之外,当表中的数据过多时,还可以根据姓名和期数进行模糊查询。
分页:规定每页显示的数据条数,超过后自动分页。
具体实现过程
下面小编将为大家介绍一下如何使用我司的低代码产品活字格实现,分为前端页面和后端逻辑两部分。
前端页面:
在界面设计章节中,小编已经设计好了整个系统的大致前端界面关系,接下来只需要实现即可。和传统代码开发不同的是,活字格在前端的设计是完全可视化的,和Excel类似,用户只需要在活字格设计器中拖拽设计即可。
1)导航栏设计
首先设计页面中的导航栏,它用于帮助用户快速导航和浏览系统的不同功能和页面,相当于是整个系统中的”地图“。
下图是活字格设计中的导航栏设置页面,左侧的一级菜单中,分别包含四个二级菜单栏分别对应四个产品信息。
导航栏跳转:双击【一级菜单】->选择任意一个产品->点击【编辑命令】。
页面跳转命令:选择【编辑命令】后跳转到该界面,选择【新建命令】->【页面跳转】并选择要跳转到的页面,四个二级菜单的操作方式均一样(由于此时还没有创建跳转到的页面,所以选择页面这一步可以空着,等后面页面创建完之后再回来选择)。
2)详细页面设计
设计完导航页面之后,接下来就是设计跳转之后的详细界面。以Wyn新手训练营证书为例,在已经设计好的Wyn表中右键选择【从表快速生成页面】,就会自动生成下面两个页面,第一个页面是显示界面,第二个页面是详细界面,然后按照界面设计中的模板将剩余的按钮(查询、删除、导入Excel、导出结业证书和导出优秀学员)和分页补全即可,其他三个产品的操作方式和Wyn一样,在此不做过多赘述。
后端逻辑:
设计完前端页面后,小编现在按照功能设计模块中的需求一步一步实现具体每个小功能:
1)导入Excel
首先实现导入Excel这一功能,下图是从新手训练营系统中导出的一份获得优秀学员和结业证书的名单模板,需要将这份Excel中的数据导入到系统中。(1和0分别代表获得和未获得)
下面是使用活字格实现导入Excel逻辑的全过程:
(1)选择前端页面设计的【导入Excel】按钮并选择【编辑命令】。
(2)在命令窗口中选择【新建命令】,然后选择【导入Excel数据到表格】命令,表格名选择对应的数据库表,导入模式选择追加(追加:只追加数据;合并:追加新增数据,更新已有数据,不删除已有数据;替换:追加新增数据,更新和删除已有数据),导入到Excel的工作表名选择对应的Excel中的sheet列名,跳过行数选择导入Excel按钮后面的文本框,表格中的列选择页面中对应的列即可。
2)查询/新增/修改/删除
1.查询:选择【查询】按钮中的【编辑命令】->【查询】命令,字段选择页面中的字段,值选择查询按钮前的查询框。
2.新增数据:选择【添加数据按钮】->【数据库操作】->【添加】,字段选择页面中的字段,值选择字段对应的单元格。
3.修改数据:在显示界面中打开【更改】的编辑命令,选择【页面跳转】,跳转页面选择详情界面,目标单元格选择详情页面中的更新按钮。
在详情页面的单元格中,打开命令窗口,并判断传值,如果传过来的是【更改】信息则更新数据,如果传来的是【添加】则为添加数据。
4.删除数据:打开【删除】按钮的编辑命令,选择【数据表操作】->【删除】,操作记录选择选择行。
3)批量证书打印
相较于前面几个命令,批量打印证书的命令操作方式比较复杂,需要用到服务端命令,为了让大家更好地理解,在设计前小编先给大家简单的介绍一下打印逻辑:
首先是根据表格中的选择行(参数为姓名、期数和日期)循环批量生成所有的PDF文件,并按照训练营期数分到不同的文件夹里面。然后第二步是将循环一中所有的期数文件夹压缩为zip文件(文件名为期数),这里需要注意的是需要将期数进行去重,因为一期里面有很多人,如果不去重,会生成很多重复的期数zip文件。第三步是将循环二中生成的所有zip文件删除掉,原因是如果不删除,再次生成和下载相同的期数zip文件时会报”文件名重复“的报错。
逻辑理清楚后,紧接着小编开始用活字格实现:
(1)创建一个服务端命令,参数选择对应表中的字段(ID,姓名和期数)
(2)紧接着是编辑对应的命令逻辑,第一个循环是打印所有的PDF文件,报表选择Wyn的结业证书,文件路径使用参数拼接,报表参数传递为表id,原因是id是唯一的,不会重复。
报表页面:期数、姓名和日期用参数替代,参数数据源选择表id,查询条件为id,打印时会将对应id的姓名、期数和日期填充到报表中。
(3)第一步循环中将所有PDF打印出来后,第二个循环是按照期数将文件夹压缩为zip包,然后将zip包从浏览器中下载下来(注意需要去对期数去重)
(3)第三步循环中将第二步所生成的zip文件删掉,需要注意的是循环数组仍然是以去重的期数为变量。
(4)最后一步是将服务端命令放到导出结业证书按钮的命令中,具体操作如下图所示:
4)分页
选择分页组件,在单元格设置中编辑和修改分页行数。
以上是以Wyn新手训练营为例的服务端功能命令操作,其余页面的服务端命令和Wyn操作方法一致,在这不做过多赘述。
发布
等到所有的页面都设计完成之后,需要将系统发布到云服务器上,可以使用阿里云、腾讯云等服务器,也可以使用活字格云服务器,小编以活字格云服务器为例,介绍如何将系统发布到云上:
选择【发布】->【服务器】->【管理发布设置】->【新建】,填写用户名和密码之后选择【下一步】,然后选择【发布】即可。
最后附上完整文件工程的Gitee地址:
https://gitee.com/GrapeCity/batch-certificate-printing
拉取方式:
系统的价值:在使用了这个系统之后,制作证书的时间由以前的2小时缩短到现在的5分钟,大大提升了正式制作的工作效率。用户在参加完训练营后,也能更快拿到制作好的证书啦。
总结
以上就是新手训练营实现一个批量打印PDF的全过程,如果您想了解更多有关于活字格的信息,欢迎点击这里查看。
扩展链接:
如何用低代码实现批量导出PDF?的更多相关文章
- php批量导出pdf文件的脚本(html-PDf)
背景:突然有大量的文件需要导出成PDF文件,写一个批量导出pdf的脚本,同时文件的命名也需要有一定的规则 导出方式:向服务器中上传csv文件,csv文件中包含文件的地址和相对应的文件命名. 如下格式: ...
- 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能
在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...
- ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程
基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...
- Magicodes.IE基础教程之导出Pdf
原文作者:hueifeng 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性说明 PdfEx ...
- Vue框架下实现导入导出Excel、导出PDF
项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...
- 怎么用CDR来批量导出图片
我们通过CorelDRAW上方菜单栏"布局"中的"插入页面"可以创建多个页面,同时编辑,适合比如书籍排版,杂志排版等等这些需要进行多页面编辑的工作. 图1:CD ...
- 低代码开发Paas平台时代来了
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 低代码理论 概念 低代码开发基于可视化和模型驱动的概念,结合了云原生和多终端体验技术,它可以在大多数业务场景中,帮助企业显著 ...
- php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)
上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/ baidu.p ...
- Python代码教你批量将PDF转为Word
很多时候在学习时发现许多文档都是PDF格式,PDF格式却不利于学习使用,因此需要将PDF转换为Word文件,但或许你从网上下载了很多软件,但只能转换前五页(如WPS等),要不就是需要收费,那有没有免费 ...
- 如何将一个PDF文件里的图片批量导出
假设我有下面这个PDF文件,里面有很多图片,我想把这些图片批量导出,而不是在Adobe Acrobat Reader里一张张手动拷贝: 本文介绍一种快捷做法. 用PDF-XChange Editor打 ...
随机推荐
- Clickhouse执行处理查询语句(包括DDL,DML)的过程
Clickhouse执行处理查询语句(包括DDL,DML)的过程 总体过程 启动线程处理客户端接入的TCP连接: 接收请求数据,交给函数executeQueryImpl()处理: executeQue ...
- 基于python+django的外卖点餐网站-外卖点餐系统
该系统是基于python+django开发的外卖点餐系统.适用场景:大学生.课程作业.毕业设计.学习过程中,如遇问题可以在github给作者留言. 演示地址 前台地址: http://food.git ...
- Keep English Level-01
state -- 声称,宣称,国家,政府 state-owned -- 国有的 He stated that "hell will break loose,politically and m ...
- 【收集】Tool
序 链接 备注 1 WinMerge - You will see the difference- 开源windows比对工具 2 AykutSarac/jsoncrack.com: Seamless ...
- 【TouchGFX】使用v4.18.1版本创建预制电路板工程的正确方法
选择要使用的电路板 实现自己的程序 Designer运行仿真没问题并生成代码 我习惯使用IAR工具,发现直接编译有错误 上述错误是因为Designer默认生成的工具链是CubeIDE,所以需要使用Cu ...
- [转帖]聊聊字符串数据长度和nls_length_semantics参数
字符串是我们设计数据库经常用到的类型,从传统的ASCII格式到UTF-8格式,不同应用需求对应不同的字符类型和长度配置.针对Oracle而言,最常用的类型无外乎char和varchar2两个基本类型. ...
- Oracle process/session/cursor/tx/tm的简单学习
Oracle process/session/cursor/tx/tm的简单学习 Oracle的部署模式 Oracle安装时有专用模式和共享模式的区别 共享模式(Shared mode): 在共享模式 ...
- [转帖]TiFlash 源码阅读(一) TiFlash 存储层概览
https://cloud.tencent.com/developer/article/1988629 背景 本系列会聚焦在 TiFlash 自身,读者需要有一些对 TiDB 基本的知识.可以通过这三 ...
- [转帖]KingbaseES不同字符类型比较转换规则
https://www.cnblogs.com/kingbase/p/14798059.html Postgresql 常用的字符数据类型的有char.varchar和text,其中 char 固定长 ...
- [转帖]jmeter正则表达式提取器获取数组数据-02篇
接上篇,当我们正则表达式匹配到多个值以后,入下图所示,匹配到21个结果,如果我们想一次拿到这一组数据怎么办呢 打开正则表达式提取器页面,匹配数字填入-1即可 通过调试取样器就可以看到匹配到已经匹配到多 ...