簡體   English   中英

如何將 QWebEngineView 渲染到打印機?

[英]How to render QWebEngineView to a printer?

我的目標:我希望能夠使用 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);
    }
}

正如我在評論中提到的,在我看來,更新是唯一/最好的解決方案,因為 Qt 5.6 不支持打印QWebEngineView

參考資料:

  • Qt 郵件列表

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

    使用 Chromium 打印非常難以實現,但我們的目標是在 Qt 5.7 中支持打印為 PDF:

  • Qt論壇

    看看這個這個,我們似乎也不會在 Qt 5.5 中擁有它。

替代方案:使用舊的 QtWebKit

如果您從源代碼構建 Qt(或使用較舊的 Qt 版本,例如 Qt 5.5),則仍然可以使用已棄用的QWebView類(由QWebEngineView替換)中的print方法,如Qt 5.6發行說明中所述:

在 Qt 5.6 中,以下模塊不再是發布包的一部分,但用戶仍然可以從源代碼構建它們:

  • Qt WebKit

請注意,我不推薦此替代方案,僅當您無法更新到最新的 Qt 版本時才使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM