QWebEngine: print a page?

2019-01-19 14:30发布

The migration from QWebKit to QWebEngine seems to be much more complicated than Qt guys claimed. With QWebKit I could print a webpage easily via

QWebView->print(&printer);

With QWebEngine class QWebEngine view does not provide a method print(). Their browser example uses a class named QWebEngineFrame which offers a method print() - but the whole QWebEngineFrame is not defined anywhere!

So my question: how do I print a page using QWebEngine?

4条回答
Luminary・发光体
2楼-- · 2019-01-19 14:57

Qt 5.7 includes print support in to pdf files for QWebEngine.

Use printToPdf function to export the current page in a pdf file. Example:

const QString fileName = QFileDialog::getSaveFileName(0,
                                                tr("Save pdf"),
                                                ".",
                                                tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
    return;
}
ui->webView->page()->printToPdf(fileName);
查看更多
Emotional °昔
3楼-- · 2019-01-19 14:58

I think the correct way to use QWebEngineView::render method because QWebEngineView is a QWidget. It accepts paint device as a first argument and you may pass QPrinter there for printing.

Update: If you can use the latest version of Qt, in Qt 5.8 a new function for printing page was added:

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

Actually it first prints to temp PDF with QPrinter settings.

Here is the link to Qt docs.

You can read about this in our blog also.

查看更多
一纸荒年 Trace。
4楼-- · 2019-01-19 15:07

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

查看更多
Anthone
5楼-- · 2019-01-19 15:11

I would offer following code (for a while):

    QTextEdit *textEdit = new QTextEdit;
    ui.myWebView->page()->toHtml([textEdit](const QString &result){ textEdit->setHtml(result); });
    textEdit->print(somerinter);
    textEdit->deleteLater();
查看更多
登录 后发表回答