打印页面

QWebEngine: print a page?

本文关键字:打印      更新时间:2023-10-16

QWebKitQWebEngine的迁移似乎比Qt人员声称的要复杂得多。使用QWebKit,我可以通过

轻松打印网页
QWebView->print(&printer);

对于QWebEngine类,QWebEngine视图不提供print()方法。他们的浏览器示例使用了一个名为QWebEngineFrame的类,它提供了一个方法print()——但是整个QWebEngineFrame没有在任何地方定义!

所以我的问题:我如何使用QWebEngine打印页面?

我认为正确的方法是使用QWebEngineView::render方法,因为QWebEngineViewQWidget。它接受paint device作为第一个参数,你可以在那里传递QPrinter用于打印。

Update:如果您可以使用最新版本的Qt,在Qt 5.8中添加了一个打印页面的新功能:

void QWebEnginePage::print(QPrinter *printer, FunctorOrLambda resultCallback);

实际上它首先打印到QPrinter设置的临时PDF。

Qt文档的链接。

你也可以在我们的博客上读到。

我将提供以下代码(暂时):

    QTextEdit *textEdit = new QTextEdit;
    ui.myWebView->page()->toHtml([textEdit](const QString &result){ textEdit->setHtml(result); });
    textEdit->print(somerinter);
    textEdit->deleteLater();

Qt 5.7支持QWebEngine的pdf文件打印。

使用printToPdf函数将当前页面导出为pdf文件。例子:

const QString fileName = QFileDialog::getSaveFileName(0,
                                                tr("Save pdf"),
                                                ".",
                                                tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
    return;
}
ui->webView->page()->printToPdf(fileName);

QWebView->page()->print(&printer, [=](bool){});