这两天处理了一下QT程序连接网络打印机执行打印的功能

描述:QT程序运行在Linux、Windows平台,软件运行过程中可根据用户的需要生成一系列的报表,现在需要将这些数据自动布局成报表的格式,并实现一键打印功能,如下:点击打印报表即可跳转到打印预览界面,并将当前界面的信息进行布局打印

在windows下QPrinter使用系统的打印驱动程序,能够很方便的使用打印功能

在Linux下,先通过QPrinter实现将打印数据(表格、图片、标题、标注等)生成PDF文件,再将PDF上传至PC执行打印功能(使用TFTP等实现传输文件功能)

此过程中的打印文件布局,根据自己的需求进行动态调整和算法优化

遇到问题:

1、将所有数据布局在一个widget上,通过 render(&painter);进行打印,只能打印第一页

解决方法:通过算法将widget分成多页,当打完一页之后,调用 newpage()函数产生新的一页进行打印。

2、使用如下方式一页一页的绘制PDF,以解决Linux没有打印机驱动的问题

//获取界面的图片并绘制
QPixmap m_pixmap = QPixmap::grabWidget(m_deviceInfoForm, m_deviceInfoForm->rect());
painter_pixmap.drawPixmap(0, 0, m_pixmap);  

3、Linux下生成的PDF与Windows下生成的PDF效果不一致,如下图:

上图是使用系统默认分辨率的情况,很明显两者显示的表格列数、行数等均不一致(此处忽略字体、背景色带来的细微问题,windows使用自带的字体,Linux下使用移植的文泉驿正黑字体)

下图是调整分辨率之后的两者的情况对比

解决方法:本人由于没有这方面的经验,一直未考虑系统打印分辨率的问题,因此一开始直接使用系统的默认分辨率,结果在相同的代码在Linux和windows系统下显示情况不一致。找了半天资料发现 resolution和setresolution函数,通过resolution()输出分辨率可知

windows下为96

Linux下为72

OK,找到了问题原因,下面就通过setresolution()解决问题咯,将分辨率固定位96,大功告成!!!

期间遇到过一个小问题:

原因是一激动将setresolution()函数写在了之后

功能实现了,下一步继续根据需求制定、优化算法咯。

欢迎大家指教,希望大家喜欢

路漫漫其修远兮,同志仍须努力

QT中QPrinter打印功能相关推荐

  1. qt的qprinter打印功能怎么设置打印时字体大小_如何打印一份成绩单

    学校考试之后,要看自己班的成绩,要打印自己班的成绩. 需要进行以下操作,设置好后,只打印自己班的那页就可以了. 惯用WPS,本文一些方法可能仅适用WPS.因为EXCEL的打印预览我没有掌握. 一.冻结 ...

  2. linux下qt打印功能如何实现,Qt Graphics-View的打印功能实现

    本文来研究一下Qt Graphics-View的打印功能实现. 在Qt的官方文档中介绍了Graphics-View的打印相关内容. Qt中对打印的支持是有一个独立的printsupport模块来完成的 ...

  3. Android 各层中日志打印功能的应用

    Android 各层中日志打印功能的应用 1. HAL层 头文件:#include <utils/Log.h>  对应的级别 打印方法   VERBOSE LOGV() DEBUG LOG ...

  4. vue中实现打印功能的方法与注意事项

    vue中实现打印功能的方法与注意事项 一.使用方法: 1. 在HTML中 2. 在VUE项目中 二.问题总结 1. 设置打印方向 2. 设置打印高度 1. 单张打印 2. 循环打印 3. 获取打印操作 ...

  5. VUE中实现打印功能插件—vue-easy-print

    话不多说直接上代码 1.安装插件:注意版本号 npm install vue-easy-print --save 我用的是0.0.8版本 npm install vue-easy-print@0.0. ...

  6. 鼎新Tiptop系统aemt100中增加打印功能串联aemr100功能

    原先Tiptop系统aemt100设备检查记录维护作业的打印功能是灰色的,客制了一个报表aemr100,想要把两个串起来.直接在aemt100点打印就能出来. 一.在FUNCTION t100_men ...

  7. Qt中实现Sleep功能的简单方法

    最近在QT的学习中,需要用到延时,但是在QT中没有直接的Sleep函数 ,添加 < stdlib >头文件也不能识别Sleep,查阅资料后才了解到,原来QT中没有直接的延时函数,看了很多方 ...

  8. SAP中实现所见即所得的打印功能操作方法

    用户SAP中的打印功能可以实现所见即所得: 事务ME53N打开某个采购申请:按下图选择硬拷贝: 在电脑上设置好缺省打印机: 个人设置中的缺省打印机选择前提是在SAP中进行过相关本地打印机配置: 打印完 ...

  9. angular中使用essence-ng2-print插件实现打印功能

    在使用angular7做项目的时候,有个需求就是实现打印.百度搜索了一下,可以看到在angular中实现打印功能可以使用essence-ng2-print插件.网上也可以搜到其他的博客,但是真正用的时 ...

最新文章

  1. UVA10305 Ordering Tasks
  2. [攻防世界 pwn]——level3
  3. 心事一件件的了掉,希望一切都能恢复到正常
  4. c++中algorithm头文件、STL库简介及使用说明
  5. ios13 无法传参_iOS13个人热点功能频遭投诉
  6. 使用jquery为table动态添加行的实现代码
  7. python pdf转txt_Python之pdf转txt
  8. 驱动程序(13) 将Windriver编写的程序制成DLL供其他程序调用
  9. 企业微信 java_java企业微信开发之通讯同步
  10. Word文字怎么添加下划线
  11. 【Shell】 sed/tr替换换行符
  12. 16含参数的极限问题
  13. 个人面试问答题知识库(一)百面机器学习篇
  14. [译] 如果界面产品设计师设计实体产品
  15. Linux平台PPT转图片(Python)
  16. SGI STL的rb_tree浅析
  17. acwing 2058. 笨拙的手指
  18. JS字符串和数字相加结果是什么?
  19. 2022最新网盘系统源码仿蓝奏
  20. 公司发了期权,我被坑了吗?

热门文章

  1. JDK自带工具keytool生成ssl证书(web服务https配置)
  2. HEVC编码框架和main函数代码跟踪解读
  3. eclipse 启动 tomcat htt://localhost:8080 不能访问
  4. MAC系统IDEA快捷键大全
  5. 某项目性能测试断流问题排查
  6. 力士乐触摸屏维修VCP20.2DUN-003-PB-NN-PW
  7. May 7th, 10:00-11:00 am 1303, Schrodinger Maps (III) by Ioan Bejenaru
  8. 3.17√ 识别次读入的一个以@为结束符的字符序列是否为形如”序列1序列2“模式的字符序列 ,序列12均没有,且序列2为序列1的逆序列
  9. linux作为输出电脑声卡,今天终于搞定我的电脑的ALC883声卡linux驱动了
  10. UOJ#414. 【APIO2018】新家