Reputation: 6203
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
?
Upvotes: 10
Views: 9092
Reputation: 5801
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.
Upvotes: 10
Reputation: 4050
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);
Upvotes: 2
Reputation: 449
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();
Upvotes: 3