QWebView不能在真正的打印机上打印多个页面?

时间:2013-10-06 16:48:33

标签: c++ qt printing qt5 qwebview

我正在尝试使用CSS page-break属性打印具有多个页面的QWebView,它可以与WebKit一起使用。 我正在使用Qt 5.1.1。

我的主要问题是,当我使用Qt将其打印为PDF时,一切都很好,但是当我尝试将其打印到真正的打印机时,除了第一个页面之外的所有页面都是空白的! 这是我的(剥离的)测试代码:

Test.h:

class MainWindow : public QMainWindow, private Ui::MainWindow
{  
Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);

public slots:
    void printHTML();
    void printPreview(QPrinter *printer);
private:
    QWebView webView;
};

Test.cpp:

#include "Test.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
    QString html;
    html= "<!DOCTYPE html><html>  <head>    <meta http-equiv='content-type' content='text/html;charset=UTF-8' />    <title>Paginated HTML</title>    <style type='text/css' media='print'>      div.page      {        page-break-after: always;        page-break-inside: avoid;      }    </style>  </head>  <body>    <div class='page'>      <h1>This is Page 1</h1>    </div>    <div class='page'>      <h1>This is Page 2</h1>    </div>    <div class='page'>      <h1>This is Page 3</h1>    </div>  </body></html>";

    webView.setHtml(html);
    printHTML();
}

void MainWindow::printPreview(QPrinter *printer) 
{
   webView.print(printer);
}

void MainWindow::printHTML() 
{
    QPrinter printer;
    QPrintPreviewDialog preview(&printer);
    preview.setWindowTitle("Test imp");

    connect(&preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printPreview(QPrinter*)));

    preview.exec();

    this->close();
}

我已将HTML示例嵌入为字符串,此示例适用于任何其他WebKit引擎并打印良好。

预览将显示它应该打印,当您使用预览的打印按钮实际打印时,它将打印第一页没有任何问题但是所有剩余页面将完全为空,空白。

我无法找到任何解决方法,使用QPainter来呈现它是不可能的,因为我需要有多个页面而QPainter并不是管理多个页面的好方法(至少我不知道如果它能够:我从未看到任何QPainter在渲染后管理多个页面。)

PS:自己尝试一下,添加一个

    printer.setOutputFormat(QPrinter::PdfFormat);

在QPrinter声明工作正常后,它将保存为PDF并显示每个打印出来的页面。 这是一个问题,因为我需要打印到普通的打印机,并希望避免另存为pdf然后打印PDF。

1 个答案:

答案 0 :(得分:3)

这在Qt中从未得到纠正,但现在QWebView已被QWebEngine取代,并且在打印页面时不会遇到这些问题。