2014-09-25 5 views
0

Как распечатать страницу, которая не отображается в окне/виджете? Qt код: вид переключателяПечать веб-страницы, которая не показана

QPainter painter(printer); 
m_webView->page()->setViewportSize(m_pageToPrint->mainFrame()->contentsSize()); 
painter.scale(scale, scale); 
m_pageToPrint->mainFrame()->render(&painter); 

Чтобы скопировать в буфер обмена, переключитесь в режим обычного текста Это код, который используется (в настоящее время превращается из m_webView в m_pageToPrint), чтобы распечатать страницу с WebView, который показал , но код для m_pageToPrint, который не показан, загружается только с HTML для печати? Результатом вышеуказанного кода является белая страница в PrinterPreviewer. Это код для загрузки HTML и после того, как назвать просмотрщик: Qt код: вид переключателя

m_pageToPrint->mainFrame()->setHtml(finalHTML); 
m_printPreviewDialog->exec(); 

Чтобы скопировать в буфер обмена, переключитесь в режим обычного текста finalHTML является допустимым HTML-код.

ответ

0

Я использую этот код, чтобы напечатать мою страницу отчета HTML:

reportprint.h

class ReportPrint : public QObject 
{ 
    Q_OBJECT 
    public: 
     ReportPrint(QObject *parent = 0); 
     void printHTML(QUrl url); 
    private: 
     QWebView m_webView; 
     QPrinter m_printer; 
     QPrintPreviewDialog *m_preview; 
    protected slots: 
     void printReady(bool enable); 
     void paintRequested(QPrinter*printer); 
} 

reportprint.cpp

ReportPrint::ReportPrint(QObject *parent) : 
    QObject(parent) { 
    connect(&m_webView, SIGNAL(loadFinished(bool)),this, SLOT(printReady(bool))); 
} 

void ReportPrint::printHTML(QUrl url) { 
    m_webView.page()->settings()->clearMemoryCaches(); 
    // here I point to directory which contains printed html file so the engine can found css files 
    QUrl base = QUrl::fromLocalFile(QApplication::applicationDirPath() + "templates/");   
    m_webView.setHtml(url,base); 
} 

void ReportPrint::printReady(bool enable) { 
    if(print_to_default_printer) { 
     QString pn = QPrinterInfo::defaultPrinter().printerName(); 
     m_printer.setPrinterName(pn); 
     m_printer.setOutputFormat(QPrinter::NativeFormat); 
     m_webView.print(&m_printer); 
    } else if(print_with_preview) { 
     m_preview = new QPrintPreviewDialog(&p_printer);     
     connect(m_preview,SIGNAL(paintRequested(QPrinter*)), 
       this,SLOT(paintRequested(QPrinter*))); 
    } 

} 

void ReportPrint::paintRequested(QPrinter *printer) { 
    m_printer.setOutputFormat(QPrinter::NativeFormat); 
    m_webView.print(printer); 
    m_preview->deleteLater(); 
}