设计软件界面,要求将人物的信息和头像导出成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文件:
