Qt导出PDF文件的两种方法

⌚Time: 2022-06-23 22:09:48

👨‍💻Author: Jack Ge

设计软件界面,要求将人物的信息和头像导出成pdf

方法一:使用QPrinter+QPainter。

在项目.pro文件中加入


QT       += printsupport


//导出pdf

void MainWindow::on_pushButton_clicked()

{

    QPrinter printer(QPrinter::HighResolution);

    printer.setPageSize(QPrinter::A4);

    printer.setResolution(300);

    printer.setOutputFormat(QPrinter::PdfFormat);

    //设置导出pdf路径

    printer.setOutputFileName("D:\\test.pdf");

    //创建画笔,以QPainter作为画板

    QPainter painter;

    

    painter.begin(&printer);



    QFont font = ui->label_9->font();

    //加粗字体

    font.setBold(true);

    painter.setFont(font);

    painter.drawText(1200,50,ui->label_9->text());



    QPen pen;

    pen.setColor(QColor(100,150,255));

    pen.setWidth(5);

    painter.setPen(pen);

    //画横线

    painter.drawLine(0,100,2400,100);



    font.setBold(false);

    font.setPointSize(20);

    font.setFamily("微软雅黑");

    painter.setFont(font);

    pen.setColor(QColor(0,0,0));

    painter.setPen(pen);

    painter.drawText(100,500,ui->label->text());

    painter.drawText(100,800,ui->label_2->text());

    painter.drawText(100,1100,ui->label_4->text());

    painter.drawText(800,500,ui->label_6->text());

    painter.drawText(800,800,ui->label_7->text());

    painter.drawText(800,1100,ui->label_8->text());

    //获取控件图像

    QPixmap pixmap = QPixmap::grabWidget(ui->label_5,ui->label_5->rect());

    QRect rect = painter.viewport();

    //设置放大倍数

    int multiple = rect.width()/3/pixmap.width();

    //放大multiple倍

    painter.scale(multiple,multiple);

    painter.drawPixmap(300,60,pixmap);



    painter.end();

}

方法二:使用QPdfWriter+QPainter


//导出pdf

void MainWindow::on_pushButton_2_clicked()

{



    QFile pdfFile("D:\\test.pdf");

    pdfFile.open(QIODevice::WriteOnly);

    QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile);

    pdfWriter->setPageSize(QPagedPaintDevice::A4);

    //QPdfWriter作为画板

    QPainter *painter = new QPainter(pdfWriter);



    QFont font = ui->label_9->font();

    //加粗字体

    font.setBold(true);

    painter->setFont(font);

    painter->drawText(1200,50,ui->label_9->text());



    QPen pen;

    pen.setColor(QColor(100,150,255));

    pen.setWidth(5);

    painter->setPen(pen);

    //画横线

    painter->drawLine(0,100,2400,100);



    font.setBold(false);

    font.setPointSize(20);

    font.setFamily("微软雅黑");

    painter->setFont(font);

    pen.setColor(QColor(0,0,0));

    painter->setPen(pen);

    painter->drawText(100,500,ui->label->text());

    painter->drawText(100,800,ui->label_2->text());

    painter->drawText(100,1100,ui->label_4->text());

    painter->drawText(800,500,ui->label_6->text());

    painter->drawText(800,800,ui->label_7->text());

    painter->drawText(800,1100,ui->label_8->text());

    //获取控件图像

    QPixmap pixmap = QPixmap::grabWidget(ui->label_5,ui->label_5->rect());

    QRect rect = painter->viewport();

    //设置放大倍数

    int multiple = rect.width()/3/pixmap.width();

    //放大multiple倍

    painter->scale(multiple,multiple);

    painter->drawPixmap(300,60,pixmap);



    //销毁实例

    delete painter;

    delete pdfWriter;

    //关闭文件

    pdfFile.close();

}


软件运行效果:

点击导出pdf1使用第一种方法导出pdf,点击导出pdf2使用第二种方法导出pdf

导出的pdf文件: