2017-06-12 34 views
1

我的目標:我希望能夠使用qt 5.6.1將qrc中的HTML頁面存儲爲PDF文件。將QWebEngineView呈現給打印機

限制:

  • 我不能使用QWebEnginePage ::打印也不QWebEnginePage :: printToPdf方法,因爲它們已經在5.8版本和5.7分別爲
  • 使用被添加QTextDocument而不是一個選項,因爲我需要一個完整的HTML支持,而不僅僅是有限的子集QTextDocument報價

問題:下面確實的代碼顯示在屏幕上的頁面,那麼doc.pdf被創建,這意味着該頁面已經被加載沒有錯誤,但是當我打開創建的PDF文件的空白頁面顯示。

任何想法我做錯了或失蹤?

#include "MainWindow.h" 
#include "ui_MainWindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QWebEngineView *view = new QWebEngineView(this); 

    setCentralWidget(view); 

    QFile file(":/print.htm"); 
    QString str; 

    if (file.open(QFile::ReadOnly | QFile::Text)) 
    { 
     str.append(file.readAll()); 
     view->setHtml(str); 
     file.close(); 
    } 

    connect(view, &QWebEngineView::loadFinished, this, &MainWindow::on_loadFinished); 
} 

void MainWindow::on_loadFinished(bool ok) 
{ 
    if (ok) 
    { 
     QPrinter printer(QPrinter::HighResolution); 

     printer.setOutputFormat(QPrinter::PdfFormat); 
     printer.setPageSize(QPageSize(QPageSize::A4)); 
     printer.setPageOrientation(QPageLayout::Portrait); 
     printer.setColorMode(QPrinter::GrayScale); 
     printer.setOutputFileName("doc.pdf"); 

     static_cast<QWebEngineView *>(sender())->render(&printer); 
    } 
} 
+1

在我看來,更新是唯一的解決方案:http://lists.qt-project.org/pipermail/interest/2016-April/021781 .html或https://forum.qt.io/topic/53238/q webengineview-print-method – m7913d

+0

是的。我已經做到了,現在使用QWebEnginePage :: printToPdf方法。謝謝(你的)信息! – scopchanov

+0

@ m7913d順便說一句,作爲答案,我會接受它。讓未來遇到這個問題的人知道該怎麼做。 – scopchanov

回答

1

正如我在評論中提到,在我看來的更新是唯一/最好的解決方案,因爲Qt的5.6不支持打印QWebEngineView

參考文獻:

  • Qt mailing list

    1. 怎麼可以我打印一個QWebEngineView內容?與QWebView我只需要調用打印方法

    印刷與鉻是令人驚訝的難以實現,但我們 旨在支持打印到PDF中的Qt 5.7:

  • Qt forum

    看看thisthis看來我們也不會在Qt 5.5中擁有它。

替代方法:使用舊QtWebKit的

一個仍然可以使用從已過時QWebView類(其由QWebEngineView替換)如果從源代碼編譯的Qt的print方法(或使用舊的Qt版本,例如Qt 5.5),如Release Notes of Qt 5.6中所述:

使用Qt 5。6以下模塊是發行 包不再一部分,但用戶仍可以從源代碼進行編譯:

  • 的Qt WebKit的

請注意,我不建議這種替代,只如果您無法更新到最新的Qt版本,請使用它

相關問題