QT实现保存PDF、打印预览、打印的功能
目标:
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、打印预览、打印的功能相关推荐
- php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...
JavaScript 实现打印,打印预览,打印设置 WebBrowser是IE内置的浏览器控件,无需用户下载. 一.WebBrowser控件 二.WebBrowder控件的方法 //打印 WebBro ...
- Vue PDF文件预览打印vue-pdf
Vue PDF文件预览vue-pdf 最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,G ...
- aspose转pdf横版_Aspose实现文件转PDF在线预览及水印功能
文件转换及在线预览 因为项目是做OA这一块,有很多附件需要实现在线预览附件,在网上也看了很多相关的资料.主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose ...
- vue项目实现打印预览、生成(导出)文档功能
这个功能其实也是自己学习到的,做完也有一段时间了,一直想记录总结一下,但一直没时间,今天总算闲了一点,趁一大早活还没找上门来,赶紧抓住时间鸭! 1.打印预览 打印预览说白就是实现快速跳转新页面预览信息 ...
- Word打印预览只能显示一半?
今天财务来电说Word打印预览异常,只能显示一半,所见即所得-->打印出来自然也是一半,检查打印机设置.WORD页面设置都没问题,换别外一个帐户登陆,使用Word打印预览打印却没问题,再回到问题 ...
- QT实现打印预览及生成Pdf功能
一.要实现打印功能,首先要在pro文件中加上 QT += printsupport 并且需要重新qmake 二.Qt提供了QPrintPreviewDIalog 类,所以打印功能可以直接通过此对话框实 ...
- c# 页面打印预览 并保存为PDF
这次打印的方法主要是获取页面的html文件 进行整理 并生成打印预览 1.C# 的.aspx 页面 需要设置 <!--startprint--> 和 <!--endprint-- ...
- Qt实现Qchart的打印和打印预览的几种方法
实现打印预览和打印,是挺常用的功能.把其他一些内容如QTextBrowser或者QEditText打印和打印预览是容易的,因为它们都自带了print方法,可以直接输出到printer.这里介绍下Qt实 ...
- 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
1 新建项目 A 修改pro中的内容如下: HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets prints ...
最新文章
- 【CyberSecurityLearning 74】DC系列之DC-5渗透测试
- Silverlight使用webClient上传下载
- Docker pull镜像报错问题
- JS_console对象中的一些常用方法
- java # 折叠_如何在Java中实现列表折叠
- PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系[转]
- linux零拷贝 nio,荐 面试题:NIO/Netty 中的零拷贝体现在哪里?
- 算法:Three sum求三个数之和
- 怎么上传本地项目或文件到SVN服务器
- android经典项目案例开发
- communicate(communicate with sb等于)
- 利用o(nlogn)的时间复杂度对某一个区间进行质因数分解
- 【雅思大作文考官范文】——第十三篇:'traditions and technology' essay
- 华为海康大华摄像头编译RTSP转RTMP和HTTPFLV
- Fedora 安装字体
- 【开发工具】SVN使用教程总结
- 2022 高德地图的使用 获取当前城市
- 8090该如何创业呢?
- Checkboxes(复选框)