ヘッダーとフッターを含む QWebViewを印刷したいと考えています。クラスQPrintPreviewDialogを使用して印刷をプレビューしています。プロジェクトphantomjsとwkhtmltopdfでこの問題を解決する方法を見ましたが、私のプロジェクトに変更されたバージョンのWebKitを含める必要があるのは少し過剰に思えます。どうやらQtとWebkitでヘッダーとフッターを印刷することは、完全に解決されていない問題です:
- https://bugs.webkit.org/show_bug.cgi?id=30357
- https://bugreports.qt.io/browse/QTBUG-29619
- 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