關於Qt導出pdf格式注意事項(導出得是一個窗口中多個控件得內容截圖)

QString filePth = QCoreApplication::applicationDirPath() + "/report";
    QString fileName = QFileDialog::getSaveFileName(this, tr("導出PDF文件"), filePth, "*.pdf");
    if (!fileName.isEmpty())
    {
        // 如果文件後綴爲空,則默認使用.pdf
        if (QFileInfo(fileName).suffix().isEmpty())
        {
            fileName.append(".pdf");
        }
        QPrinter *printer = new QPrinter(QPrinter::ScreenResolution);
        // 指定輸出格式爲pdf
        //    printer.setResolution(QPrinter::ScreenResolution);
        printer->setPageSize(QPrinter::A4);
        printer->setOutputFormat(QPrinter::PdfFormat);
        printer->setOutputFileName(fileName);
        printer->setWinPageSize(ui.stackedWidget->count());
        QPainter painter_pixmap(this);

        for (int index = 0, num = ui.stackedWidget->count(); index < num; index++)
        {
            QRect rect1 = ui.stackedWidget->widget(index)->geometry();
            QPixmap pixmap = ui.stackedWidget->widget(index)->grab(rect1);
            //currentWidgetList << pixmap;

            
            painter_pixmap.begin(printer);
            QRect rect = painter_pixmap.viewport();
            int multipleW = rect.width() / pixmap.width();
            int multipleH = rect.height() / pixmap.height();
            painter_pixmap.scale(1, 1);

            painter_pixmap.drawPixmap(10, 10, rect.width() - 10, rect.height() - 10, pixmap);
            if (index < ui.stackedWidget->count() - 1)
            {
                printer->newPage();
            }
            printer->newPage();
        
        }
        
        painter_pixmap.end();

 

注意:如果要導出多張pdf,一定要將QPainter得對象實例化再循環外面,不然,只會導出最後一張,end()接口,放再循環外面,

如果導出得pdf文檔最後一頁是空白頁,一定要根據情況加上

if (index < ui.stackedWidget->count() - 1)
 {
         printer->newPage();
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章