【问题标题】:How to render QWebEngineView to a printer?如何将 QWebEngineView 渲染到打印机?
【发布时间】:2017-06-12 13:29:02
【问题描述】:

我的目标:我希望能够使用 qt 5.6.1 将来自 qrc 的 HTML 页面存储为 PDF 文件。

限制:

  • 我无法使用 QWebEnginePage::printQWebEnginePage::printToPdf 方法,因为它们已分别添加到 5.8 和 5.7 版本中
  • 使用 QTextDocument 不是一个选项,因为我需要完整的 HTML 支持,而不仅仅是 QTextDocument 提供的有限子集

问题: 下面的代码确实在屏幕上显示了页面,然后创建了doc.pdf,这意味着页面已经加载没有错误,但是当我打开创建的PDF时文件显示一个空白页。

任何想法我做错了什么或错过了什么?

#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QWebEngineView *view = new QWebEngineView(this);

    setCentralWidget(view);

    QFile file(":/print.htm");
    QString str;

    if (file.open(QFile::ReadOnly | QFile::Text))
    {
        str.append(file.readAll());
        view->setHtml(str);
        file.close();
    }

    connect(view, &QWebEngineView::loadFinished, this, &MainWindow::on_loadFinished);
}

void MainWindow::on_loadFinished(bool ok)
{
    if (ok)
    {
        QPrinter printer(QPrinter::HighResolution);

        printer.setOutputFormat(QPrinter::PdfFormat);
        printer.setPageSize(QPageSize(QPageSize::A4));
        printer.setPageOrientation(QPageLayout::Portrait);
        printer.setColorMode(QPrinter::GrayScale);
        printer.setOutputFileName("doc.pdf");

        static_cast<QWebEngineView *>(sender())->render(&printer);
    }
}

【问题讨论】:

标签: c++ windows qt pdf rendering


【解决方案1】:

正如我在评论中提到的,在我看来更新是唯一/最好的解决方案,因为 Qt 5.6 不支持打印QWebEngineView

参考资料:

  • Qt mailing list:

    1. 如何打印 QWebEngineView 内容?使用 QWebView 我只需要调用打印方法

    使用 Chromium 进行打印非常难以实施,但我们 旨在支持 Qt 5.7 中的 PDF 打印:

  • Qt forum:

    看看thisthis 似乎我们不会在Qt 5.5 中也有它。

替代方案:使用旧的 QtWebKit

如果您从源代码构建 Qt(或使用较旧的 Qt 版本,例如 Qt 5.5),则仍然可以使用已弃用的 QWebView 类(由 QWebEngineView 替换)中的 print 方法,如Release Notes of Qt 5.6:

在 Qt 5.6 中,以下模块不再是发行版的一部分 包,但用户仍然可以从源代码构建它们:

  • Qt WebKit

请注意,我不推荐此替代方案,仅在您无法更新到最新 Qt 版本时使用它

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 2020-04-04
    • 1970-01-01
    • 2016-08-04
    • 2016-10-11
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多