2015-09-22 15 views
9

La migrazione da QWebKit a QWebEngine sembra essere molto più complicata di quanto sostenuto da Qt. Con QWebKit ho potuto stampare una pagina web facilmente tramiteQWebEngine: stampa una pagina?

QWebView->print(&printer); 

Con QWebEngine classe QWebEngine vista non fornisce un metodo print(). L'esempio del browser utilizza una classe denominata QWebEngineFrame che offre un metodo print() - ma l'intero QWebEngineFrame non è definito da nessuna parte!

Quindi la mia domanda: come stampare una pagina utilizzando QWebEngine?

+0

Sembra un po 'hacky, ma funziona la stampa se si chiama JavaScript all'interno di una pagina web: window.print()? –

risposta

8

Penso che il modo corretto di utilizzare il metodo QWebEngineView::render perché QWebEngineView è un QWidget. Accetta la vernice come primo argomento e puoi passare QPrinter lì per la stampa.

Aggiornamento: Se è possibile utilizzare l'ultima versione di Qt, in Qt 5.8 è stata aggiunta una nuova funzione per la stampa pagina:

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

realtà prime stampe a temperatura PDF con QPrinter impostazioni.

Questo è il collegamento a Qt docs.

Puoi leggere anche questo nel nostro blog.

+1

Questa non è davvero una soluzione - prova a stampare una pagina più grande di quella che può essere visualizzata visibilmente e capirai dove sono i limiti ;-) – Elmi

2

vorrei offrire seguente codice (per un po '):

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

Grazie! Questo funziona bene per la semplice stampa di HTML: 'QTextEdit * textEdit = new QTextEdit; textEdit-> setHtml (td.toHtml()); textEdit-> print (_printer); textEdit-> deleteLater(); 'dove td è un QTextDocument. – Marc

2

Qt 5.7 include il supporto di stampa per i file pdf per QWebEngine.

Utilizzare la funzione printToPdf per esportare la pagina corrente in un file pdf. Esempio:

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

Si noti che il metodo printToPdf() aggiunge il testo statico "PAGINA 2:" all'inizio della seconda pagina e così via e questo non è configurabile. Inoltre, non è possibile aggiungere intestazioni/piè di pagina personalizzati a ciascuna pagina. Se queste due cose non ti infastidiscono, è un'ottima soluzione semplice e funziona anche quando il documento si estende su più pagine. –

0

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

+0

true per Qt 5.8 o più recente ma di sicuro non per 5.5 – Elmi

+0

Sì, questo è per Qt> = 5.8 –

Problemi correlati