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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值