QWebEngine: распечатать страницу?

Миграция с QWebKit на QWebEngine кажется намного более сложной, чем утверждали ребята из Qt. С QWebKit я мог легко распечатать веб-страницу через

QWebView->print(&printer);

С QWebEngine классом QWebEngine представление не предоставляет метод print(). Их пример браузера использует класс с именем QWebEngineFrame, который предлагает метод print(), но весь QWebEngineFrame нигде не определен!

Итак, мой вопрос: как распечатать страницу с помощью QWebEngine?


person Elmi    schedule 22.09.2015    source источник
comment
Кажется немного хакерским, но работает ли печать, если вы вызываете JavaScript внутри веб-страницы: window.print() ?   -  person Kamil Klimek    schedule 22.09.2015


Ответы (4)


Я думаю, что правильный способ использовать метод QWebEngineView::render, потому что QWebEngineView это QWidget. Он принимает устройство рисования в качестве первого аргумента, и вы можете передать ему QPrinter для печати.

Обновление: если вы можете использовать последнюю версию Qt, в Qt 5.8 была добавлена ​​новая функция для печати страницы:

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

На самом деле сначала он печатает временный PDF с настройками QPrinter.

Вот ссылка на документы по Qt.

Вы можете прочитать об этом в нашем блог также.

person demonplus    schedule 22.09.2015
comment
На самом деле это не решение - попробуйте напечатать страницу, которая больше, чем можно отобразить визуально, и вы поймете, где находятся ограничения ;-) - person Elmi; 01.05.2016

Я бы предложил следующий код (на время):

    QTextEdit *textEdit = new QTextEdit;
    ui.myWebView->page()->toHtml([textEdit](const QString &result){ textEdit->setHtml(result); });
    textEdit->print(somerinter);
    textEdit->deleteLater();
person eSKon    schedule 05.05.2016
comment
Спасибо! Это прекрасно работает для простой печати некоторого HTML: QTextEdit *textEdit = new QTextEdit; textEdit->setHtml(td.toHtml()); textEdit->print(_printer); textEdit->deleteLater(); где td — это QTextDocument. - person Marc; 26.07.2016

Qt 5.7 включает поддержку печати в файлы pdf для QWebEngine< /а>.

Используйте функцию printToPdf для экспорта текущей страницы в файл PDF. Пример:

const QString fileName = QFileDialog::getSaveFileName(0,
                                                tr("Save pdf"),
                                                ".",
                                                tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
    return;
}
ui->webView->page()->printToPdf(fileName);
person mohabouje    schedule 13.07.2016
comment
Следует отметить, что метод printToPdf() добавляет статический текст PAGE 2: вверху 2-й страницы и т. д., и это не настраивается. Кроме того, нет возможности добавлять собственные верхние/нижние колонтитулы на каждую страницу. Если эти две вещи вас не беспокоят, это отличное простое решение, которое работает, даже если документ занимает несколько страниц. - person Vern Jensen; 25.05.2017

person    schedule
comment
верно для Qt 5.8 или новее, но точно не для 5.5 - person Elmi; 07.02.2018
comment
Да, это для Qt ›= 5.8 - person Simon Esneault; 08.02.2018