QWebView не печатает несколько страниц на реальном принтере?

Ну, я пытаюсь напечатать QWebView с несколькими страницами, используя атрибут разрыва страницы CSS, который отлично работает с WebKit.
Я использую Qt 5.1.1.

Моя главная проблема в том, что все в порядке, когда я печатаю его в формате PDF с использованием Qt, но когда я пытаюсь распечатать его на реальном принтере, все страницы, кроме первой, остаются пустыми!
Вот мой (раздетый) код теста:

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

Решение

Это никогда не исправлялось в Qt, но теперь QWebView заменен на QWebEngine, и он не страдает от этих проблем при печати своих страниц.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]