0

ヘッダーとフッターを含む QWebViewを印刷したいと考えています。クラスQPrintPreviewDialogを使用して印刷をプレビューしています。プロジェクトphantomjswkhtmltopdfでこの問題を解決する方法を見ましたが、私のプロジェクトに変更されたバージョンのWebKitを含める必要があるのは少し過剰に思えます。どうやらQtとWebkitでヘッダーとフッターを印刷することは、完全に解決されていない問題です:

  1. https://bugs.webkit.org/show_bug.cgi?id=30357
  2. https://bugreports.qt.io/browse/QTBUG-29619
  3. https://wiki.qt.io/Qt_project_org_faq (質問 229)

アプリオリに、何ページ印刷するかわかりません。現在、QPrinter をサブクラスし、newPage()メソッドを再実装しています。これはひどいハックですが、ほとんど機能します。私が直面している問題は、pageRect の外側に印刷されたものすべてがぼやけて表示されることです。透かし効果は印刷結果ではなくプレビューにのみ存在しますが、低品質は常に存在します。

すべてのWebKitをプロジェクトに持ち込まずに、ヘッダーをより良い品質で印刷するためにできることはありますか?.

問題を引き起こしていると思われる違いは、QWebView::print の代わりに QWebView::render を使用していることです。QCustomPrinter には、ヘッダーを印刷する前に関連付けられた QPainter があります (コンテンツが印刷されたときに関連付けられた QPainter )。したがって、ヘッダーを印刷するときに QWebVieww:print を呼び出すことができません。これは、そのメソッドが新しい QPainter を QPrinter に関連付けようとするためです。

void CustomPrinter::printHeader()
{
   QPainter & painter =*this->paintEngine()->painter();
   QWebView v;
   v.setContent("<html> "         
                "<body>"
                " asdadasdasdasd "
               "</body>"
              "</html>");
   v.setFixedSize(this->pageRect().size());
   v.render(&painter,QPoint(0,-  95),QRegion(0,0,this->pageRect().width(),95));
}

編集 (Kuba Ober の回答に基づく): QWebView の代わりに QTextDocument を使用すると、品質の問題が解決します。

void CustomPrinter::printHeader()
{
   QPainter * painter =p->paintEngine()->painter();
   painter->save();
   QTextDocument v;
   v.setHtml(QString::fromStdString(_impresion.cabecera()));
   QRectF r =this->pageRect();
   r.moveTo(0,0);
   r.setHeight(95);
   painter->translate(0,-95);
   v.drawContents(painter,r);
   painter->restore();
}

私が話していることの最小限の例を共有します。CustomPrinter クラスはヘッダーを印刷します。 https://www.dropbox.com/s/2vifzk8rs6scrx5/stackExample.tar.gz?dl=0

4

0 に答える 0