[英]How to render QWebEngineView to a printer?
我的目標:我希望能夠使用 qt 5.6.1 將從 qrc 中獲取的 HTML 頁面存儲為 PDF 文件。
限制:
問題:下面的代碼確實在屏幕上顯示了該頁面,然后創建了 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
:
參考資料:
- 如何打印 QWebEngineView 內容? 使用 QWebView 我只需要調用打印方法
使用 Chromium 打印非常難以實現,但我們的目標是在 Qt 5.7 中支持打印為 PDF:
Qt論壇:
替代方案:使用舊的 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.