Qt打印widget显示内容

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

猜你喜欢

转载自www.cnblogs.com/mc-r/p/12717578.html