一、前言

自从数据可以导出到xls,又有客户提出了不同的需求,比如既然可以将数据导出到xls,那是否可以导出到pdf文件呢?因为xls打开以后用户可以修改数据造假之类的,而pdf默认是不可编辑的,除非借助专业的工具,所以如果想要限定用户导出数据不能被更改,那导出pdf是最佳选择。写程序往往都是这样,一步步慢慢增加,随着用户需求的增加,程序量也越来越多,轮子组件也越来越多。往往客户提需求的时候,一定要认真聆听,尤其是一线用户,实际使用的用户,尽管有些不合理的需求,但是能满足就尽量满足,毕竟客户就是上帝。

在Qt中要导出到pdf必须要用到qprinter类,相当于这些数据是打印到pdf的,所以确切点是叫打印到pdf文件,而不是导出数据到pdf,格式这块由于采用的是打印,所以需要用html嵌套table表格的形式来打印,支持的格式就有限了,一般可以设置字体大小、颜色、边框、对齐等,尽管是html,但是也是支持有限的html格式,这点要特别注意。现在的qt版本貌似单独将pdf提炼出来成了独立的模块,功能更强大。

结构体支持的参数:

  • 文件名称
  • 表名
  • 主标题
  • 副标题
  • 字段名称集合
  • 字段宽度集合
  • 内容集合
  • 行内容分隔符
  • 子内容分隔符
  • 边框宽度
  • 校验列
  • 校验类型
  • 校验值
  • 检验颜色
  • 最后列拉伸填充
  • 横向排版
  • 纸张边距

二、功能特点

  1. 组件同时集成了导出数据到csv、xls、pdf和打印数据。
  2. 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。
  3. 同时支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。
  4. 提供静态方法直接传入QTableView、QTableWidget控件,自动识别列名、列宽和数据内容。
  5. 每组功能都提供单独的完整的示例,注释详细,非常适合各阶段Qter程序员。
  6. 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,支持嵌入式linux。
  7. 速度超快,9个字段10万行数据只需要2秒钟完成。
  8. 只需要四个步骤即可开始急速导出海量数据比如100W条记录到Excel。
  9. 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。
  10. 可设置标题、副标题、表名。
  11. 可设置导出数据的字段名、列名、列宽。
  12. 可设置末尾列自动拉伸填充,默认拉伸更美观。
  13. 可设置是否启用校验过滤数据,启用后符合规则的数据特殊颜色显示。
  14. 可指定校验的列、校验规则、校验值、校验值数据类型。
  15. 校验规则支持 精确等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
  16. 校验值数据类型支持 整型int、浮点型float、双精度型double,默认文本字符串类型。
  17. 可设置随机背景颜色及需要随机背景色的列集合。
  18. 支持分组输出数据,比如按照设备分组输出数据,方便查看。
  19. 可设置csv分隔符、行内容分隔符、子内容分隔符。
  20. 可设置边框宽度、自动填数据类型,默认自动数据类型开启。
  21. 可设置是否开启数据单元格样式,默认不开启,不开启可以节约大概30%的文件体积。
  22. 可设置横向排版、纸张边距等,比如导出到pdf以及打印数据。
  23. 支持图文混排导出数据到pdf以及打印数据,自动分页。
  24. 灵活性超高,可自由更改源码设置对齐方式、文字颜色、背景颜色等。
  25. 支持任意excel表格软件,包括但不限于excel2003-2021、wps、openoffice等。
  26. 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

三、体验地址

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_dataout.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页: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相关推荐

  1. 利用itext操作pdf从数据库导出大量数据--功能汇总(一)

    [原始需求] 通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),文件要有公司相关标志和水印功能. [需求分析] 1. 通过SQL及JDBC模式 ...

  2. 票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案

    票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案 -- 全球领先.100%源码全开放.可用 ...

  3. Qt/C++数据库应用4-数据打印到纸张

    一.前言 数据能够打印到pdf文件,当然可以打印到纸张,而且使用qprinter默认就是打印到纸张的,上一篇文章写得功能是打印到pdf,其实还要单独特殊设置打印到文件,并指定格式为pdf.不指定输出文 ...

  4. 利用itext操作pdf从数据库导出大量数据--添加水印(四)

    [原始需求] 通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),文件要有公司相关标志和水印功能. [需求分析] 1. 通过SQL及JDBC模式 ...

  5. qt 不显示 mysql 数据表中的内容_qt 数据库操作总结

    整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 转载于:https://www.cnblogs.com/lsgxeva/p/7852102.html 首先,要查 ...

  6. c 将mysql表数据打印,c 中数据库数据如何导出至excel表格-用sql语句把一个数据库内的表保存成excel表格??...

    如何用JAVA将数据库中的数据导入到excel表格 1.C语言产生ASCII数据文件,使用空格做作为数据分隔符. 2入Excel,选择数据选项卡 / 获部数据工具组 / 自文本按钮 3.进入数据导入框 ...

  7. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...

    票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...

  8. Qt数据库应用21-数据分组导出

    一.前言 数据分组导出和打印这个需求并不是近期的需求,而是之前做温湿度监控系统的时候提的需求,当然也有几个系统用到了,比如啤酒保鲜监控系统.这个需求的应用场景是,有很多个设备,每个设备都产生了很多的运 ...

  9. Qt数据库应用18-横向纵向排版

    一.前言 近期用户提了个需求,需要打印一个文档,要求其中部分页横向排版部分页面纵向排版,这个在之前的通用打印导出pdf类中是不具备的,通用的打印导出pdf只能统一设置一个排版方式,要么横向要么纵向,而 ...

  10. QT学习日记17——Qt数据库

    学习视频链接 2021新版QT图形框架编程开发(层层到肉)_C++图形用户界面开发框架_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wf4y1Y7uh ...

最新文章

  1. 电信的 DNS 服务器地址
  2. Java编程基础04——流程控制语句
  3. dom4j生成、解析xml
  4. 文巾解题1738. 找出第 K 大的异或坐标值
  5. 20165115 第二周学习总结
  6. ModelAndView介绍
  7. 利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控
  8. html隐藏块元素过度动画,CSS3实现DIV图层隐藏到显示的过渡效果
  9. CentOS7下安装Tomcat
  10. leetcode9. 回文数
  11. 【Druid】Druid简介
  12. 插件 KSImageNamed 用图片时自动显示图片缩略图
  13. 新微擎 v1.7.9 图文回复 标题emoji
  14. leetcode/剑指Offer05.替换空格 双指针法实现原地替换
  15. 西门子触摸屏脚本程序_西门子触摸屏实例程序
  16. Windows+WSL+DockerDesktop下安装OpenV2X
  17. lumion功能介绍丨 建筑动画丨实时渲染
  18. VM虚拟机 Liunx修改ip地址
  19. mocha + chai
  20. Android Studio打造一个小说阅读App

热门文章

  1. 【数字逻辑设计】电路原理图
  2. 如何检测360核晶模式和CPU虚拟化
  3. 计算机课ppt实验报告,ppt模板,实验报告
  4. java简历包装项目经验,项目实战
  5. python抓取豆瓣妹子图片并上传到七牛
  6. Android茶叶进销存源码分享
  7. 中标麒麟高级服务器操作系统V7.6升级安装GCC-8.5.0编译工具
  8. 小区广播背景音乐系统IP网络广播解决方案
  9. 微信如何收发企业邮箱邮件
  10. Unity 清理注册表和临时文件