2015-09-22 17 views
9

Việc di chuyển từ QWebKit sang QWebEngine có vẻ phức tạp hơn nhiều so với những người được hỏi. Với QWebKit tôi có thể in một trang web một cách dễ dàng thông quaQWebEngine: in một trang?

QWebView->print(&printer); 

với QWebEngine lớp QWebEngine xem không cung cấp một phương pháp print(). Ví dụ trình duyệt của họ sử dụng một lớp có tên là QWebEngineFrame, trong đó cung cấp một phương thức print() - nhưng toàn bộ QWebEngineFrame không được định nghĩa ở bất kỳ đâu!

Vì vậy, câu hỏi của tôi: làm cách nào để in một trang bằng cách sử dụng QWebEngine?

+0

Có vẻ một chút hacky, nhưng hoạt động in ấn nếu bạn gọi JavaScript trong một trang web: window.print()? –

Trả lời

8

Tôi nghĩ cách đúng để sử dụng phương pháp QWebEngineView::renderQWebEngineViewQWidget. Nó chấp nhận thiết bị sơn làm đối số đầu tiên và bạn có thể vượt qua QPrinter ở đó để in.

Cập nhật: Nếu bạn có thể sử dụng phiên bản mới nhất của Qt, Qt trong 5,8 một chức năng mới cho trang in đã được bổ sung:

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

Trên thực tế nó in đầu tiên tạm PDF với QPrinter cài đặt.

Đây là liên kết đến Qt docs.

Bạn cũng có thể đọc về điều này trong số blog của chúng tôi.

+1

Đây không thực sự là giải pháp - hãy thử in một trang lớn hơn những gì có thể được hiển thị rõ ràng và bạn sẽ hiểu được giới hạn ở đâu ;-) – Elmi

2

tôi sẽ cung cấp sau mã (trong một thời gian):

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

Cảm ơn! Điều này hoạt động tốt cho việc in ấn đơn giản một số HTML: 'QTextEdit * textEdit = new QTextEdit; textEdit-> setHtml (td.toHtml()); textEdit-> print (_printer); textEdit-> deleteLater(); 'trong đó td là QTextDocument. – Marc

2

Qt 5,7 bao gồm hỗ trợ in trong các tập tin pdf cho QWebEngine.

Sử dụng printToPdf để xuất trang hiện tại trong tệp pdf. Ví dụ:

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

Cần lưu ý rằng phương thức printToPdf() thêm văn bản tĩnh "TRANG 2:" vào đầu trang thứ 2, v.v. và điều này không thể cấu hình được. Ngoài ra, không có cách nào để thêm đầu trang/chân trang tùy chỉnh vào mỗi trang. Nếu hai điều này không làm phiền bạn, đó là một giải pháp đơn giản tuyệt vời và hoạt động ngay cả khi tài liệu kéo dài nhiều trang. –

0

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

+0

đúng cho Qt 5.8 hoặc mới hơn nhưng chắc chắn không phải cho 5.5 – Elmi

+0

Có, đây là cho Qt> = 5.8 –

Các vấn đề liên quan