一.前言
楼主之前导出过文本文件、csv、excel,随着接触的用户越来越多,也出现了导出PDF的需求,该文章楼主介绍通过QPrinter方式来导出
二.流程
1.pro文件增加QT += printsupport
2.头文件包含
#include <QPrinter>
#include <QUrl>
#include <QFileDialog>
#include <QDesktopServices>
#include <QRect>
3.核心代码
void PdfWidget::on_pushButton_1_clicked()
{
QString pdfName = "E://"+QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss")+".pdf";
QString pdfPath = QFileDialog::getSaveFileName(this,"Save Pdf",pdfName,"*.pdf");
if(pdfPath.isEmpty())
return;
QPrinter printer(QPrinter::PrinterMode::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPageSize(QPagedPaintDevice::A4);
printer.setOutputFileName(pdfPath);
printer.setOrientation(QPrinter::Landscape);
printer.setPageMargins(10,10,10,10,QPrinter::Millimeter);
QPainter painter;
painter.begin(&printer);
// 设置字体属性
QFont font;
font.setFamily("宋体");
font.setBold(true);
font.setWeight(15);
font.setUnderline(true);
painter.setFont(font);
// 设置画笔颜色
QPen pen;
pen.setColor(Qt::green);
painter.setPen(pen);
// 开始绘制
painter.drawText(QRect(0, 100,printer.width(),printer.height()),"111111");
painter.drawText(QRect(0, 400, printer.width(), printer.height()), "222222222222222222222222");
// 新一页
printer.newPage();
painter.drawText(QRect(0, 0, printer.width(), printer.height()), "3333333333333333333333333");
painter.end();
// 打开PDF
QDesktopServices::openUrl(QUrl(pdfPath));
}
4.效果
三.其他
1.QPrinter方式导出PDF,相当于这些数据是打印到pdf的,因此确切点来说是叫打印到pdf文件
2.这种的写入数据方式就和绘图差不多了,需要根据需要计算位置,也需要注意是否超过了纸张的最大高度以及最大宽度,对开发者来说,比较复杂
3.楼主认为这种方式只适合简单的数据