Qt数据库应用3-数据打印到pdf
一、前言
自从数据可以导出到xls,又有客户提出了不同的需求,比如既然可以将数据导出到xls,那是否可以导出到pdf文件呢?因为xls打开以后用户可以修改数据造假之类的,而pdf默认是不可编辑的,除非借助专业的工具,所以如果想要限定用户导出数据不能被更改,那导出pdf是最佳选择。写程序往往都是这样,一步步慢慢增加,随着用户需求的增加,程序量也越来越多,轮子组件也越来越多。往往客户提需求的时候,一定要认真聆听,尤其是一线用户,实际使用的用户,尽管有些不合理的需求,但是能满足就尽量满足,毕竟客户就是上帝。
在Qt中要导出到pdf必须要用到qprinter类,相当于这些数据是打印到pdf的,所以确切点是叫打印到pdf文件,而不是导出数据到pdf,格式这块由于采用的是打印,所以需要用html嵌套table表格的形式来打印,支持的格式就有限了,一般可以设置字体大小、颜色、边框、对齐等,尽管是html,但是也是支持有限的html格式,这点要特别注意。现在的qt版本貌似单独将pdf提炼出来成了独立的模块,功能更强大。
结构体支持的参数:
- 文件名称
- 表名
- 主标题
- 副标题
- 字段名称集合
- 字段宽度集合
- 内容集合
- 行内容分隔符
- 子内容分隔符
- 边框宽度
- 校验列
- 校验类型
- 校验值
- 检验颜色
- 最后列拉伸填充
- 横向排版
- 纸张边距
二、功能特点
- 组件同时集成了导出数据到csv、xls、pdf和打印数据。
- 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。
- 同时支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。
- 提供静态方法直接传入QTableView、QTableWidget控件,自动识别列名、列宽和数据内容。
- 每组功能都提供单独的完整的示例,注释详细,非常适合各阶段Qter程序员。
- 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,支持嵌入式linux。
- 速度超快,9个字段10万行数据只需要2秒钟完成。
- 只需要四个步骤即可开始急速导出海量数据比如100W条记录到Excel。
- 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。
- 可设置标题、副标题、表名。
- 可设置导出数据的字段名、列名、列宽。
- 可设置末尾列自动拉伸填充,默认拉伸更美观。
- 可设置是否启用校验过滤数据,启用后符合规则的数据特殊颜色显示。
- 可指定校验的列、校验规则、校验值、校验值数据类型。
- 校验规则支持 精确等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
- 校验值数据类型支持 整型int、浮点型float、双精度型double,默认文本字符串类型。
- 可设置随机背景颜色及需要随机背景色的列集合。
- 支持分组输出数据,比如按照设备分组输出数据,方便查看。
- 可设置csv分隔符、行内容分隔符、子内容分隔符。
- 可设置边框宽度、自动填数据类型,默认自动数据类型开启。
- 可设置是否开启数据单元格样式,默认不开启,不开启可以节约大概30%的文件体积。
- 可设置横向排版、纸张边距等,比如导出到pdf以及打印数据。
- 支持图文混排导出数据到pdf以及打印数据,自动分页。
- 灵活性超高,可自由更改源码设置对齐方式、文字颜色、背景颜色等。
- 支持任意excel表格软件,包括但不限于excel2003-2021、wps、openoffice等。
- 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。
三、体验地址
- 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_dataout.zip
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
四、效果图
五、相关代码
QString DataHelper::DataOut(quint8 type, const QString &file, const QString &title,const QString &sheet, const QStringList &content,const QStringList &columnNames, const QList<int> &columnWidths)
{//设置结构体数据DataContent dataContent;//填充内容dataContent.content = content;//设置列名列宽dataContent.columnNames = columnNames;dataContent.columnWidths = columnWidths;//设置标题dataContent.title = title;//如果是导出数据则先判断文件名称是否为空,为空则弹出文件对话框选择QString fileName = file;if (fileName.isEmpty() && type < 3) {//不同的格式后缀QString filter = "all files (*.*)";if (type == 0) {filter = "csv files (*.csv)";} else if (type == 1) {filter = "xls files (*.xls)";} else if (type == 2) {filter = "pdf files (*.pdf)";}fileName = QFileDialog::getSaveFileName(0, "选择保存文件", "", filter);if (fileName.isEmpty()) {return fileName;}}//设置文件名dataContent.fileName = fileName;//xls还需要设置表名dataContent.sheetName = sheet;//调用静态函数if (type == 0) {//重新组织内容,前面写入标题,分隔符换成csv的定义的分隔符QStringList list;//把标题加到内容中list << columnNames.join(DataCsv::CsvSpliter);//重新更换分隔符foreach (QString text, content) {text.replace(";", DataCsv::CsvSpliter);list << text;}DataCsv::outputData(fileName, list);} else if (type == 1) {DataXls::saveXls(dataContent);} else if (type == 2) {DataPrint::savePdf(dataContent);} else if (type == 3) {DataPrint::print(dataContent);}return fileName;
}
Qt数据库应用3-数据打印到pdf相关推荐
- 利用itext操作pdf从数据库导出大量数据--功能汇总(一)
[原始需求] 通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),文件要有公司相关标志和水印功能. [需求分析] 1. 通过SQL及JDBC模式 ...
- 票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案
票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案 -- 全球领先.100%源码全开放.可用 ...
- Qt/C++数据库应用4-数据打印到纸张
一.前言 数据能够打印到pdf文件,当然可以打印到纸张,而且使用qprinter默认就是打印到纸张的,上一篇文章写得功能是打印到pdf,其实还要单独特殊设置打印到文件,并指定格式为pdf.不指定输出文 ...
- 利用itext操作pdf从数据库导出大量数据--添加水印(四)
[原始需求] 通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),文件要有公司相关标志和水印功能. [需求分析] 1. 通过SQL及JDBC模式 ...
- qt 不显示 mysql 数据表中的内容_qt 数据库操作总结
整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 转载于:https://www.cnblogs.com/lsgxeva/p/7852102.html 首先,要查 ...
- c 将mysql表数据打印,c 中数据库数据如何导出至excel表格-用sql语句把一个数据库内的表保存成excel表格??...
如何用JAVA将数据库中的数据导入到excel表格 1.C语言产生ASCII数据文件,使用空格做作为数据分隔符. 2入Excel,选择数据选项卡 / 获部数据工具组 / 自文本按钮 3.进入数据导入框 ...
- 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...
票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...
- Qt数据库应用21-数据分组导出
一.前言 数据分组导出和打印这个需求并不是近期的需求,而是之前做温湿度监控系统的时候提的需求,当然也有几个系统用到了,比如啤酒保鲜监控系统.这个需求的应用场景是,有很多个设备,每个设备都产生了很多的运 ...
- Qt数据库应用18-横向纵向排版
一.前言 近期用户提了个需求,需要打印一个文档,要求其中部分页横向排版部分页面纵向排版,这个在之前的通用打印导出pdf类中是不具备的,通用的打印导出pdf只能统一设置一个排版方式,要么横向要么纵向,而 ...
- QT学习日记17——Qt数据库
学习视频链接 2021新版QT图形框架编程开发(层层到肉)_C++图形用户界面开发框架_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wf4y1Y7uh ...
最新文章
- 电信的 DNS 服务器地址
- Java编程基础04——流程控制语句
- dom4j生成、解析xml
- 文巾解题1738. 找出第 K 大的异或坐标值
- 20165115 第二周学习总结
- ModelAndView介绍
- 利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控
- html隐藏块元素过度动画,CSS3实现DIV图层隐藏到显示的过渡效果
- CentOS7下安装Tomcat
- leetcode9. 回文数
- 【Druid】Druid简介
- 插件 KSImageNamed 用图片时自动显示图片缩略图
- 新微擎 v1.7.9 图文回复 标题emoji
- leetcode/剑指Offer05.替换空格 双指针法实现原地替换
- 西门子触摸屏脚本程序_西门子触摸屏实例程序
- Windows+WSL+DockerDesktop下安装OpenV2X
- lumion功能介绍丨 建筑动画丨实时渲染
- VM虚拟机 Liunx修改ip地址
- mocha + chai
- Android Studio打造一个小说阅读App