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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM