QWebEngine:如何打印网页?

10

QWebKit迁移到QWebEngine似乎比Qt官方声称的要复杂得多。使用QWebKit,我可以通过以下方式轻松打印网页:

QWebView->print(&printer);

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

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


似乎有点不正规,但如果在网页中调用JavaScript:window.print(),打印是否有效? - Kamil Klimek
4个回答

10

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

更新:如果你能使用Qt的最新版本,在Qt 5.8中添加了一个新的页面打印函数:

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

实际上,它首先使用 QPrinter 设置将内容打印到临时PDF中。

这里是Qt 文档的链接

您也可以在我们的博客中了解更多信息。


1
这并不是真正的解决方案 - 尝试打印一个比可见显示更大的页面,你就会明白限制在哪里了;-) - Elmi

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

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

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

谢谢!这对于简单打印一些HTML很有效:QTextEdit *textEdit = new QTextEdit; textEdit->setHtml(td.toHtml()); textEdit->print(_printer); textEdit->deleteLater();其中td是一个QTextDocument。 - Marc

2
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);

1
需要注意的是,printToPdf() 方法会在第二页顶部添加静态文本“PAGE 2:”,以此类推,这是不可配置的。此外,没有办法为每个页面添加自定义页眉/页脚。如果这两个问题不影响您,那么它是一个非常简单的解决方案,即使文档跨越多个页面也可以使用。 - Vern Jensen

1

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

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


1
仅适用于Qt 5.8或更新版本,但肯定不适用于5.5。 - Elmi
1
是的,这适用于Qt >= 5.8。 - Simon Esneault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接