【问题标题】:Qt Webengine Render to PrintQt Webengine 渲染到打印
【发布时间】:2016-08-04 16:28:10
【问题描述】:

有没有办法使用 QtWebEngine 将 HTML/SVG 渲染为打印机、PDF 和光栅图像?

我们想从 WebKit 切换到 WebEngine,所以使用 WebKit 的 QWebView 不再是一种选择。

【问题讨论】:

  • 你仍然可以使用 QWebView::print()。 QtWebEngine 还不支持打印(Qt 5.6)
  • 好吧,根据需要的 HTML 支持,你可以试试 QTextDocument,因为它对 HTML 的支持有限,但足够好 (doc.qt.io/qt-5/richtext-html-subset.html)

标签: windows qt render qtwebengine


【解决方案1】:

Qt 5.7 中宣布Qt Web Engine 将支持打印为PDF,目前处于测试阶段。

在 Qt 5.7 中为 QWebEnginePage 类添加了两个 printToPdf() 函数重载。

我们在公司blog有示例如何使用这些新功能。

您也可以在这里寻找一些已经可用的 Qt Web Engine 打印选项:

QWebEngine: print a page?

【讨论】:

  • 但仍然无法打印到打印对话框/真实打印机和纸张'
  • @swaechter 是的,不幸的是,不知道何时实施,请参阅here
  • 我真的很喜欢 Qt,但这很糟糕(想想所有必须在他们的应用程序中打印发票/账单/报告等的商业客户)。我想我会把它打印成 PDF 并使用 poppler 进行渲染/打印
【解决方案2】:

从工作线程中获得可调用的打印需要进行一些修改:

void printToPDF(const QString& html, const QString& fileName)
{
    #if QT_VERSION >= 0x057000
    QtWebEngine::initialize();
    QWebEnginePage page;
    QEventLoop loop;
    loop.connect(&page, &QWebEnginePage::loadFinished, [&page, &loop, &fileName]() {
        page.printToPdf([&loop, &fileName] (QByteArray ba) {
            QFile f(fileName);
            if (f.open(QIODevice::WriteOnly))
            {
                f.write(ba);
                f.close();
            } else {
                qDebug() << "Error opening file for writing" << fileName << f.errorString();
            }
            loop.exit();
        });
    });
    page.setHtml(html);
    loop.exec();
    #endif
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多