// 生成PDF文件
QPrinter printer;
QPixmap image;
// QPainter painter(&printer);
image = image.grabWidget(this,0,0,210,297);
QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"),
QString(), "*.pdf");
if (!fileName.isEmpty()) {
// 如果文件后缀为空,则默认使用.pdf
if (QFileInfo(fileName).suffix().isEmpty())
fileName.append(".pdf");
// 指定输出格式为pdf
// printer.setOutputFormat(QPrinter::PdfFormat);
// printer.setPageSize(QPrinter::A4);
// printer.setOutputFileName(fileName);
// painter.drawPixmap(0,0,image);
// QPainter painter(&printer);
// QRect rect = painter.viewport();
// QSize size = image.size();
// size.scale(rect.size(), Qt::KeepAspectRatio);
// painter.setViewport(rect.x(), rect.y(),
// size.width(), size.height());
// painter.setWindow(image.rect());
// painter.drawPixmap(0, 0, image);
// printer.setOutputFileName(fileName);
// printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(fileName);
QPixmap pixmap=QPixmap::grabWidget(ui->widget,ui->widget->rect()); //抓取界面widget区域,可以抓取任意控件区域,Qt5推荐新的API QWidget::grab
QPainter painter;
painter.begin(&printer);
QRect rect=painter.viewport(); //获取painter的视口区域
int factor=rect.width()/pixmap.width(); //计算painter视口区域与抓取图片区域的尺寸比例因子
painter.scale(factor*1.3,factor*1.3); //绘制时按照比例因子放大
// painter.drawPixmap(10,10,pixmap); //按照坐标画图
painter.drawPixmap(0,0,pixmap); //按照坐标画图
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
// printer.newPage(); //另起一页
//pic_painter.scale(1,1); //回复比例,否则字体很大不正常,此步貌似不需要
// pic_painter.drawText(10,10,"this is another page"); //图文混排
// pic_painter.end();
}