当前位置:网站首页>Qt导出PDF文件的两种方法

Qt导出PDF文件的两种方法

2022-06-24 06:58:00 百口可乐__

设计软件界面,要求将人物的信息和头像导出成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文件:
在这里插入图片描述

原网站

版权声明
本文为[百口可乐__]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_60352504/article/details/125435809