提问人:Praveenkumar Thulasiraman 提问时间:11/6/2023 最后编辑:Lars NielsenPraveenkumar Thulasiraman 更新时间:11/7/2023 访问量:86
如何将qml ui另存为pdf
How to save qml ui as pdf
问:
我在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);
}
}
}
如何使用抓取窗口指定需要抓取哪个窗口
答:
1赞
Lars Nielsen
11/6/2023
#1
您的代码可以正常工作,但会覆盖已存在的文件。
在下面的一行中,您设置了一个静态文件,以便打印机将始终打印到此文件,该文件将覆盖它。Report.pdf
printer.setOutputFileName(path+"/Report.pdf");
我建议您利用 来指定您正在打印的窗口。
您可以通过将上面的行更改为以下内容来实现此目的:winid
printer.setOutputFileName(path + "/" + winid.toStdString() + "_Report.pdf");
这将为您提供您尝试打印的每个窗口的文件。
评论
printer.setOutputFileName(path+"/Report.pdf")