将QWebEngineView渲染到打印机

时间:2017-06-12 13:29:03

标签: c++ windows qt pdf rendering

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

限制:

  • 我不能使用 QWebEnginePage :: print QWebEnginePage :: 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);
    }
}

1 个答案:

答案 0 :(得分:1)

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

参考文献:

  • Qt mailing list

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

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

  • Qt forum

      

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

替代方案:使用旧的QtWebKit

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

  

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

     
      
  • Qt WebKit
  •   

请注意,我不推荐此替代方案,只有在您无法更新到最新的Qt版本时才能使用