我们使用 Qt Web Engine 将 html 转换为 pdf。使用的代码如下所示。此代码工作正常。问题是在执行代码时,出现了 QTWebEngineProcess.exe 的控制台窗口。如果用户关闭窗口,pdf 打印将不会完成,应用程序会挂起。
仅当从大型 QT 小部件应用程序执行代码时才会出现该窗口(即使代码是在创建 QApplication 对象后立即执行的)。如果我们从 boost 测试用例中执行相同的代码,则不会出现该窗口。
显示窗口的原因是什么以及如何避免显示该窗口?
我们使用Qt5.12.6
QWebEnginePage report;
bool printingSuccessful = false;
bool loadSuccessful = false;
QObject::connect(&report, &QWebEnginePage::pdfPrintingFinished,
[&printingSuccessful](const QString&, const bool success)
{
printingSuccessful = success;
});
QObject::connect(&report, &QWebEnginePage::loadFinished,
[&loadSuccessful](const bool success)
{
loadSuccessful = success;
});
QEventLoop loop;
QObject::connect(&report, &QWebEnginePage::loadFinished, &loop, &QEventLoop::quit);
report.setHtml(htmlTemplate);
loop.exec();
if (!loadSuccessful)
{
throw std::exception("Could not load Html in QWebEngine.");
}
QObject::connect(&report, &QWebEnginePage::pdfPrintingFinished, &loop, &QEventLoop::quit);
report.printToPdf(QString("C:\\Projects\\xy.pdf"));
loop.exec();
if (!printingSuccessful)
{
throw std::exception("Could not print Html to PDF.");
}