我的目标:我希望能够使用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);
}
}
答案 0 :(得分:1)
正如我的评论所述,在我看来,更新是唯一/最佳解决方案,因为Qt 5.6不支持打印QWebEngineView
:
参考文献:
- 如何打印QWebEngineView内容?使用QWebView我只需要调用print方法
醇>使用Chromium进行印刷非常难以实施,但我们 旨在支持Qt 5.7中的PDF打印:
替代方案:使用旧的QtWebKit
如果您从源代码构建Qt(或者使用较旧的Qt版本,例如,仍然可以使用已弃用的print
类中的QWebView
方法(由QWebEngineView
替换) Qt 5.5)如Release Notes of Qt 5.6中所述:
使用Qt 5.6,以下模块不再是发布的一部分 包,但用户仍然可以从源代码构建它们:
- Qt WebKit
请注意,我不推荐此替代方案,只有在您无法更新到最新的Qt版本时才能使用