目标:

1、实现文字、图像保存为pdf并在保存后自动打开的功能;

2、实现文字、图像打印预览的功能

3、实现文字、图像打印的功能

平台:

VS 2019 + QT5.15.2

需要的类:

QPainter、QPdfWriter

需要的QT库

Qt5PrintSupport.dll:C:\QT\Qt5.15.2\5.15.2\msvc2019_64\bin

plugins:C:\QT\Qt5.15.2\5.15.2\msvc2019_64\plugins\printsupport

需在VS对应的工程中增加附加依赖项

工程右键--属性--链接器--输入--附加依赖项中增加

//实现文字、图像保存为pdf并在保存后自动打开的功能
//input QString ID,name,QImageQPdfWriter* pPdfWriter = new QPdfWriter(&pdfFile);
pPdfWriter->setPageSize(QPagedPaintDevice::A4);
pPdfWriter->setResolution(300);
int iMargin = 40;                   // 页边距
pPdfWriter->setPageMargins(QMarginsF(iMargin, iMargin, iMargin, iMargin));
QPainter* pPdfPainter = new QPainter(pPdfWriter);void createPdf(QPainter* pPdfPainter, QString ID,QString Name, const QImage* image)
{QTextOption option(Qt::AlignHCenter | Qt::AlignVCenter);// 标题,居中int pos_y = 10;int pos_x = 0;int prtlogic_wid = pPdfPainter->viewport().width();int prtlogic_hgt = pPdfPainter->viewport().height();int row_h = prtlogic_hgt/60;//标题QFont fontTitle("Microsoft YaHei", 14, QFont::DemiBold);pPdfPainter->setFont(fontTitle);                    // 为绘制工具设置字体pPdfPainter->drawText(QRect(0, pos_y, prtlogic_wid, row_h*2), Qt::AlignHCenter | Qt::AlignBottom,"****信息表");pos_y += row_h * 3;option.setWrapMode(QTextOption::WordWrap);QFont fontText1("Microsoft YaHei", 10, QFont::Normal, true);pPdfPainter->setFont(fontText1);                    // 为绘制工具设置字体//ID pPdfPainter->setFont(QFont("", 10));m_key = tr("ID:");QString outHeadPatientIDString = m_key + m_ID;//m_ID为实际的值pPdfPainter->drawText(QRect(pos_x, pos_y, prtlogic_wid, row_h), Qt::AlignLeft, outHeadPatientIDString);pos_x += prtlogic_wid / 4;//NamepPdfPainter->setFont(QFont("", 10));m_key = tr("Name:");QString outHeadPatientNameString = m_key + m_Name;//m_Name为实际的值pPdfPainter->drawText(QRect(pos_x, pos_y, prtlogic_wid, row_h), Qt::AlignLeft, outHeadPatientNameString);pos_x += prtlogic_wid / 4;//imageint image_hgt = pFuseImage->height();//待保存图像的真实-高度int image_wid = pFuseImage->width();//待保存图像的真实-宽度int image_show_hgt = prtlogic_wid * image_hgt / image_wid;//根据纸张比例计算的保存图像时的高度pPdfPainter->drawImage(QRect(0, pos_y, prtlogic_wid, image_show_hgt), *pFuseImage);//page feetint feetlinewidth = 450;int pos_feety = pPdfPainter->viewport().height();pos_feety -= row_h;int pos_rightx = pPdfPainter->viewport().width();pos_rightx -= feetlinewidth;timeQDateTime time = QDateTime::currentDateTime();text = QString("Date:");pPdfPainter->drawText(QRect(pos_rightx, pos_feety, feetlinewidth, row_h), Qt::AlignLeft, text);pPdfPainter->drawText(QRect(pos_rightx + 150, pos_feety, feetlinewidth - 150, row_h), Qt::AlignHCenter, time.toString("yyyy-MM-dd  hh:mm:ss"));
}
//实现打印预览
QPrinter printer;
printer.setOutputFormat(QPrinter::NativeFormat);
printer.setPageSize(QPagedPaintDevice::A4);
printer.setOrientation(QPrinter::Portrait);
printer.printerName();//获取默认打印机
printer.setNumCopies(1);
printer.setPageOrder(QPrinter::FirstPageFirst);//设置打印顺序printer.setPageMargins(6, 6, 6, 6, QPrinter::Millimeter);
printer.setPageSize(QPrinter::A4);//打印预览
QPrintPreviewDialog* pPreviewDialog = new QPrintPreviewDialog(&printer);
connect(pPreviewDialog, &QPrintPreviewDialog::paintRequested, this, &IGSReportView::slotPintPreview);//关联打印预览的内容
pPreviewDialog->resize(1000, 900);
pPreviewDialog->exec();
delete pPreviewDialog;
pPreviewDialog = nullptr;void slotPintPreview(QPrinter* printer)
{QPainter pPdfPainter;printer->setPageSize(QPrinter::A4);pPdfPainter.begin(printer);createPdf(&pPdfPainter, m_ID, m_Name, pFuseImage);pPdfPainter.end();
}
//打印QPrintDialog printDialog(&printer, this);
if (printDialog.exec() == QDialog::Accepted)
{QPainter painter(&printer);createPdf(&painter, m_sPatientID, m_sPatientName, pFuseImage);
}

QT实现保存PDF、打印预览、打印的功能相关推荐

  1. php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...

    JavaScript 实现打印,打印预览,打印设置 WebBrowser是IE内置的浏览器控件,无需用户下载. 一.WebBrowser控件 二.WebBrowder控件的方法 //打印 WebBro ...

  2. Vue PDF文件预览打印vue-pdf

    Vue PDF文件预览vue-pdf 最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,G ...

  3. aspose转pdf横版_Aspose实现文件转PDF在线预览及水印功能

    文件转换及在线预览 因为项目是做OA这一块,有很多附件需要实现在线预览附件,在网上也看了很多相关的资料.主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose ...

  4. vue项目实现打印预览、生成(导出)文档功能

    这个功能其实也是自己学习到的,做完也有一段时间了,一直想记录总结一下,但一直没时间,今天总算闲了一点,趁一大早活还没找上门来,赶紧抓住时间鸭! 1.打印预览 打印预览说白就是实现快速跳转新页面预览信息 ...

  5. Word打印预览只能显示一半?

    今天财务来电说Word打印预览异常,只能显示一半,所见即所得-->打印出来自然也是一半,检查打印机设置.WORD页面设置都没问题,换别外一个帐户登陆,使用Word打印预览打印却没问题,再回到问题 ...

  6. QT实现打印预览及生成Pdf功能

    一.要实现打印功能,首先要在pro文件中加上 QT += printsupport 并且需要重新qmake 二.Qt提供了QPrintPreviewDIalog 类,所以打印功能可以直接通过此对话框实 ...

  7. c# 页面打印预览 并保存为PDF

    这次打印的方法主要是获取页面的html文件 进行整理 并生成打印预览 1.C# 的.aspx 页面 需要设置   <!--startprint--> 和 <!--endprint-- ...

  8. Qt实现Qchart的打印和打印预览的几种方法

    实现打印预览和打印,是挺常用的功能.把其他一些内容如QTextBrowser或者QEditText打印和打印预览是容易的,因为它们都自带了print方法,可以直接输出到printer.这里介绍下Qt实 ...

  9. 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览

     1 新建项目 A  修改pro中的内容如下: HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets prints ...

最新文章

  1. 【CyberSecurityLearning 74】DC系列之DC-5渗透测试
  2. Silverlight使用webClient上传下载
  3. Docker pull镜像报错问题
  4. JS_console对象中的一些常用方法
  5. java # 折叠_如何在Java中实现列表折叠
  6. PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别
  7. ASCII、Unicode、GBK和UTF-8字符编码的区别联系[转]
  8. linux零拷贝 nio,荐 面试题:NIO/Netty 中的零拷贝体现在哪里?
  9. 算法:Three sum求三个数之和
  10. 怎么上传本地项目或文件到SVN服务器
  11. android经典项目案例开发
  12. communicate(communicate with sb等于)
  13. 利用o(nlogn)的时间复杂度对某一个区间进行质因数分解
  14. 【雅思大作文考官范文】——第十三篇:'traditions and technology' essay
  15. 华为海康大华摄像头编译RTSP转RTMP和HTTPFLV
  16. Fedora 安装字体
  17. 【开发工具】SVN使用教程总结
  18. 2022 高德地图的使用 获取当前城市
  19. 8090该如何创业呢?
  20. Checkboxes(复选框)

热门文章

  1. mips汇编计算开方_全国计算机一级考试模拟题(11)
  2. CSS文字超出部分省略号显示
  3. STM32F103入门 | 6.工程模板的建立
  4. Unity UGUI 血条 伤害数字 优化
  5. 数据如水,网络为渠 | 康普打好网络“地基”
  6. 用群晖ds218play下载人人影视中的视频
  7. 小学生认识计算机网络教案,小学计算机教案
  8. 最长连续不重复子序列
  9. 仿淘宝右侧tab栏切换
  10. 提交表单后显示.asp源代码