QWebEngine:打印页面?

QWebEngine: print a page?

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

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

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

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

我认为使用 QWebEngineView::render 方法的正确方法是因为 QWebEngineViewQWidget。它接受绘画设备作为第一个参数,您可以将 QPrinter 传递给那里进行打印。

更新: 如果你可以使用最新版本的Qt,在Qt 5.8中新增了打印页面的功能:

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

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

这里是 link 到 Qt docs.

您也可以在我们的 blog 中阅读相关内容。

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

    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){});