如何将qml ui另存为pdf

How to save qml ui as pdf

提问人:Praveenkumar Thulasiraman 提问时间:11/6/2023 最后编辑:Lars NielsenPraveenkumar Thulasiraman 更新时间:11/7/2023 访问量:86

问:

我在qml中创建了一个ui,现在我想将该ui另存为pdf。我尝试使用 GrabWidow,但在我的 qml 中,我使用了 2 个以上的应用程序窗口。抓住窗口,将我的主qml作为屏幕截图,但我想获取我的第二个应用程序窗口。

void PdfExporter::screenShot(QString path, QString winid)
{

    foreach(QObject* obj, mEngine->rootObjects()) 
    {
        QQuickWindow* window = qobject_cast<QQuickWindow*>(obj);
        qDebug()<<"window Name:" << winid;
        if (window)
        {
            window->renderTargetId();
            QImage image = window->grabWindow();

            QPrinter printer;
            printer.setOutputFormat(QPrinter::PdfFormat);
            printer.setOutputFileName(path+"/Report.pdf");

            QPainter painter(&printer);
            printer.setOutputFormat(QPrinter::PdfFormat);
            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.drawImage(0,0,100,100,image);
            painter.drawImage(QRect(0, 0, image.width(), image.height()), image);

             //painter.begin(&printer);

        }
    }
}

如何使用抓取窗口指定需要抓取哪个窗口

C++ QML 、QT5

评论

3赞 Alan Birtles 11/6/2023
您是否确定您的代码尚未工作,而只是用第一个窗口输出覆盖第二个窗口输出,因为您始终使用相同的文件名?
1赞 Praveenkumar Thulasiraman 11/6/2023
你能详细说明一下吗?
1赞 Abderrahmene Rayene Mihoub 11/6/2023
请尝试在此处为每个窗口使用不同的文件名:.printer.setOutputFileName(path+"/Report.pdf")
0赞 Praveenkumar Thulasiraman 11/6/2023
嗨,我可以保存 pdf,但它将我的主要 qml 保存为 pdf,我有 2 个 qml 文件主文件和报告 qml,并在 mani 中创建报告 qml 的组件。我想要 PDF 格式的报告 QML 不是主要的

答:

1赞 Lars Nielsen 11/6/2023 #1

您的代码可以正常工作,但会覆盖已存在的文件。 在下面的一行中,您设置了一个静态文件,以便打印机将始终打印到此文件,该文件将覆盖它。Report.pdf

printer.setOutputFileName(path+"/Report.pdf");

我建议您利用 来指定您正在打印的窗口。 您可以通过将上面的行更改为以下内容来实现此目的:winid

printer.setOutputFileName(path + "/"  + winid.toStdString() + "_Report.pdf");

这将为您提供您尝试打印的每个窗口的文件。