// 生成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(); }