2015-09-22 5 views
9

QWebKit से QWebEngine से माइग्रेशन क्यूटी लोगों के मुकाबले कहीं अधिक जटिल लगता है। QWebKit के साथ मैं QWebEngine वर्ग QWebEngine दृष्टि से के माध्यम सेQWebEngine: एक पृष्ठ प्रिंट करें?

QWebView->print(&printer); 

आसानी से एक वेब पेज प्रिंट एक विधि print() प्रदान नहीं करता है हो सकता है। उनका ब्राउज़र उदाहरण QWebEngineFrame नामक कक्षा का उपयोग करता है जो एक विधि print() प्रदान करता है - लेकिन पूरे QWebEngineFrame को कहीं भी परिभाषित नहीं किया गया है!

तो मेरा प्रश्न: मैं QWebEngine का उपयोग कर एक पृष्ठ कैसे मुद्रित करूं?

+0

एक छोटा सा hacky लगता है, लेकिन मुद्रण काम करता है अगर आप किसी वेबपेज के भीतर जावास्क्रिप्ट फोन: window.print()? –

उत्तर

8

मुझे लगता है कि QWebEngineView::render विधि का उपयोग करने का सही तरीका है क्योंकि QWebEngineViewQWidget है। यह पेंट डिवाइस को पहले तर्क के रूप में स्वीकार करता है और आप मुद्रण के लिए QPrinter पास कर सकते हैं।

अद्यतन: यदि आप क्यूटी 5.8 में क्यूटी के नवीनतम संस्करण का उपयोग कर सकते हैं मुद्रण पेज के लिए एक नया समारोह जोड़ा गया है:

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

वास्तव में यह पहली QPrinter सेटिंग्स के साथ अस्थायी पीडीएफ करने के लिए प्रिंट।

यहां 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

धन्यवाद! यह कुछ एचटीएमएल की सरल प्रिंटिंग के लिए ठीक काम करता है: 'QTextEdit * textEdit = new QTextEdit; टेक्स्ट एडिट-> setHtml (td.toHtml()); टेक्स्ट एडिट-> प्रिंट (_ प्रिंटर); टेक्स्ट एडिट-> हटाएंटर(); 'जहां टीडी एक QTextDocument है। – Marc

2

क्यूटी 5.7 QWebEngine के लिए पीडीएफ फाइलों में प्रिंट समर्थन शामिल है।

printToPdf फ़ंक्शन को वर्तमान पृष्ठ को पीडीएफ फ़ाइल में निर्यात करने के लिए उपयोग करें। उदाहरण:

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:" जोड़ती है, और इसी तरह, और यह कॉन्फ़िगर करने योग्य नहीं है। इसके अतिरिक्त, प्रत्येक पृष्ठ पर कस्टम शीर्षलेख/पाद लेख जोड़ने का कोई तरीका नहीं है। यदि ये दो चीजें आपको परेशान नहीं करती हैं, तो यह एक बहुत ही सरल समाधान है और दस्तावेज़ तब भी काम करता है जब दस्तावेज़ एकाधिक पृष्ठों को फैलाता है। –

0

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

+0

क्यूटी 5.8 या नए के लिए सच है लेकिन निश्चित रूप से 5.5 – Elmi

+0

के लिए नहीं, हाँ, यह Qt> = 5.8 के लिए है –

संबंधित मुद्दे