码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • qt输出自定义的pdf文件源码详解


    qt中有两种方式可以输出pdf:

    方式1:使用QPrinter即打印机的方式打印pdf

    这种方式,在qt4成为唯一的方式。

    1. QPrinter printer(QPrinter::HighResolution); //高清晰度
    2. printer.setPageSize(QPrinter::A4); //设置纸张大小
    3. printer.setResolution(300); //设置清晰度,即dpi ,每个平方英寸像素为300
    4. printer.setOutputFormat(QPrinter::PdfFormat); //设置导出类型
    5. QPainter *painter = new QPainter();
    6. painter->begin(&printer);
    7. //显示文本
    8. painter->drawText(50,50,ui->label->text());
    9. //画横线
    10. painter->drawLine(0,375,1500,375);
    11. //显示图片
    12. QPixmap pixmap("C:\\xx.png");
    13. painter->drawPixmap(0,0,pixmap);
    14. painter->end();
    15. delete painter;
    16. painter = Q_NULLPTR; //养成编程好习惯,回收对象要置空

    相关博客:

    Qt开发-ui导出pdf格式 - 知乎

    方式2:QPdfWriter方式输出pdf文档

    qt5的版本,qt提供了一个独立的pdf文件写入方式,那就是QPdfWriter,所以咱们当然用QPdfWriter啦。

     

    正确使用的示例代码如下:

    1. //截取软件的界面作为截图,打印到pdf里
    2. QPixmap pix=QWidget::grab(QRect(tmp,ui->customPlot->size()));
    3. QFile pdfFile(path);
    4. QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile); //实例化QPdfWriter
    5. //设置分辨率,ScreenResolution, PrinterResolution(已经弃用),
    6. //HighResolution(和ScreenResolution效果一样)
    7. pdfWriter->setResolution(QPrinter::ScreenResolution);
    8. pdfWriter->setPageSize(QPagedPaintDevice::A8); //设置纸张为A8纸大小
    9. //下面这行代码也是可以调整页面大小的,单位为毫米,如果加减一个大点的数,是有效果的
    10. //pdfWriter->setPageSizeMM(QSizeF(pix.widthMM(),pix.heightMM()));
    11. //实例化QPainter,这里特别注意:pdf输出大小,是由这个QPainter决定的,
    12. //所以实例化这个QPainter时,确保pdfWriter已经被设置完成,否则后面再设置的话
    13. //是不会起作用的。要么就调用pdfWriter->newPage()函数,才会起作用,但是会新起一页了
    14. QPainter *pic_painter = new QPainter(pdfWriter);
    15. //计算painter视口区域与抓取图片区域的尺寸比例因子
    16. QRect rect = pic_painter->viewport();
    17. //绘制时按照比例因子放大
    18. pic_painter->scale(factor,factor);
    19. //按照坐标画图
    20. pic_painter->drawPixmap(0,0,pix);
    21. delete pic_painter;
    22. delete pdfWriter;
    23. pdfFile.close();

    //实例化QPainter,这里特别注意:pdf输出大小,是由这个QPainter决定的,
    //所以实例化这个QPainter时,确保pdfWriter已经被设置完成,否则后面再设置的话
    //是不会起作用的。要么就调用pdfWriter->newPage()函数,才会起作用,但是会新起一页了。典型的例子就是设置页面大小setPageSize或者setPageSizeMM函数设置的页面大小不起作用。

    第二个问题:QPainter只能是一个实例设置到pdfWriter,不能多个实例弄上去,否则newPage()会不起作用,看这个例子:c++ 无法使用QPdfWriter在pdf文件中添加新页面 _大数据知识库

    遇到这个问题的博客例子:

    QPdfWriter和页面大小 - VoidCC

    Qt使用QPDFWriter和QPainter生成PDF的问题_52_赫兹的鲸的博客-CSDN博客

    通过QTextDocument打印到QPdfWriter

    由于用QPainter打印到QPdfWriter需要自己去计算好每一个坐标(Qt 生成pdf文件_qt生成pdf_小鱼仙官的博客-CSDN博客,Qt开发-ui导出pdf格式 - 知乎),挺麻烦的,所以,用QTextDocument可以支持的html直接打印上去的,所以对于格式化需求,这个就太好了,具体的参考博客:(十七)QT生成PDF文件_qt 生成pdf_sunatmine的博客-CSDN博客

    Qt之生成pdf_一去二三里_新浪博客

    比较好的参考博客

    53.Qt-QPdfWriter绘制PDF,支持表单输出 - 走看看

    QT 生成 pdf QPdfWriter_Beyond欣的博客-CSDN博客

  • 相关阅读:
    leetcode 583. 两个字符串的删除操作、72. 编辑距离
    leetcode记录(一)
    企业搭建网站选择什么配置的云服务器比较合适?
    2022,中国TO B企业出海实录
    Unity学习笔记---材质纹理&天空盒
    华为机试真题 C++ 实现【羊、狼、农夫过河】【2022.11 Q4新题】
    云原生时代下DockerFile应用的名场面-尚文网络xUP楠哥
    awk的简单使用
    【python+appium】自动化测试
    【opencv-c++】图像对象的赋值,拷贝和创建
  • 原文地址:https://blog.csdn.net/kangkanglhb88008/article/details/127577650
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号