2015-09-22 10 views
9

QWebKitからQWebEngineへの移行は、Qtの主張よりもずっと複雑に思えます。 QWebKitで、私は方法print()を提供していないQWebEngineクラスQWebEngineビューでQWebEngine:ページを印刷しますか?

QWebView->print(&printer); 

経由で簡単にWebページを印刷することができます。彼らのブラウザの例では、というメソッドを提供するQWebEngineFrameというクラスを使用していますが、QWebEngineFrameはどこにも定義されていません!

私の質問:QWebEngineを使用してページを印刷するにはどうすればよいですか?

+0

少しハックようだが、あなたはWebページ内のJavaScriptを呼び出す場合は、作業を印刷ん:window.print()? –

答えて

8

QWebEngineViewQWidgetなのでQWebEngineView::renderメソッドを使用する正しい方法だと思います。最初の引数としてペイントデバイスを受け入れ、印刷のためにそこにQPrinterを渡すことができます。

更新:あなたはQtの最新バージョンを使用することができた場合は、印刷ページのためのQt 5.8の新機能が追加されました:

void QWebEnginePage::print(QPrinter *printer, FunctorOrLambda resultCallback); 

は、実際には最初のQPrinter設定で一時PDFに出力します。

ここはQt docsへのリンクです。

これについてはblogでもご覧になれます。私は(しばらくの間)に次のコードを提供するであろう

+1

これは実際の解決策ではありません。目に見えるものよりも大きなページを印刷しようとしていますが、どこに限界があるのか​​分かりません。 – Elmi

2

QTextEdit *textEdit = new QTextEdit; 
    ui.myWebView->page()->toHtml([textEdit](const QString &result){ textEdit->setHtml(result); }); 
    textEdit->print(somerinter); 
    textEdit->deleteLater(); 
+0

ありがとう!これはいくつかのHTMLの単純な印刷にはうまくいきます: 'QTextEdit * textEdit = new QTextEdit; textEdit-> setHtml(td.toHtml()); textEdit-> print(_printer); textEdit-> deleteLater(); 'tdはQTextDocumentです。 – Marc

2

のQt 5.7は、QWebEngineのためのPDFファイルにで印刷サポートが含まれています。

printToPdf機能を使用して、現在のページをPDFファイルにエクスポートします。例:

const QString fileName = QFileDialog::getSaveFileName(0, 
               tr("Save pdf"), 
               ".", 
               tr("PDF Files (*.pdf)")); 
if (fileName.isEmpty()) { 
    return; 
} 
ui->webView->page()->printToPdf(fileName); 
+1

printToPdf()メソッドは、2ページ目の先頭に静的テキスト「PAGE 2:」を追加するなど、これは設定できません。 さらに、各ページにカスタムヘッダー/フッターを追加する方法もありません。これらの2つのことが気にならない場合は、ドキュメントが複数のページにまたがっていても簡単に解決できます。 –

0

QWebView->page()->print(&printer, [=](bool){});

+0

Qt 5.8以降ではtrueですが、5.5では確かではありません – Elmi

+0

はい、これはQt> = 5.8です –

関連する問題