2015-09-22 3 views
9

Перемещение с QWebKit на QWebEngine кажется намного сложнее, чем заявили ребята из Qt. С QWebKit я мог печатать веб-страницы легко с помощьюQWebEngine: распечатать страницу?

QWebView->print(&printer); 

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

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

+0

Кажется немного Hacky, но делает печать работу, если вы звоните JavaScript внутри страницы: window.print()? –

ответ

8

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

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

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

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

Вот эта ссылка на Qt docs.

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

+1

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

2

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

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

Спасибо! Это отлично подходит для простой печати некоторого HTML: 'QTextEdit * textEdit = new QTextEdit; textEdit-> setHtml (td.toHtml()); textEdit-> print (_printer); textEdit-> deleteLater(); 'где td - QTextDocument. – Marc

2

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); 
+1

Следует отметить, что метод printToPdf() добавляет статический текст «СТРАНИЦА 2:» в начало второй страницы и т. Д., И это не настраивается. Кроме того, нет возможности добавлять пользовательские верхние и нижние колонтитулы на каждую страницу. Если эти две вещи вас не беспокоят, это простое и простое решение, даже если документ охватывает несколько страниц. –

0

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

+0

true для Qt 5.8 или новее, но точно не для 5.5 – Elmi

+0

Да, это для Qt> = 5.8 –

Смежные вопросы