WebBrowser/WebBrowserTabWidget.py

changeset 5036
318e879a37fa
parent 4979
7ac0959842f9
child 5038
df7103c3f2a6
diff -r cd2a891703d3 -r 318e879a37fa WebBrowser/WebBrowserTabWidget.py
--- a/WebBrowser/WebBrowserTabWidget.py	Wed Jul 13 11:51:03 2016 +0200
+++ b/WebBrowser/WebBrowserTabWidget.py	Wed Jul 13 14:09:52 2016 +0200
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QFile
 from PyQt5.QtGui import QIcon
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog
 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
@@ -562,25 +562,57 @@
         if browser is None:
             browser = self.currentBrowser()
         
-        printer = QPrinter(mode=QPrinter.HighResolution)
-        if Preferences.getPrinter("ColorMode"):
-            printer.setColorMode(QPrinter.Color)
-        else:
-            printer.setColorMode(QPrinter.GrayScale)
-        printerName = Preferences.getPrinter("PrinterName")
-        if printerName:
-            printer.setPrinterName(printerName)
-        printer.setOutputFormat(QPrinter.PdfFormat)
         name = WebBrowserTools.getFileNameFromUrl(browser.url())
         if name:
             name = name.rsplit('.', 1)[0]
             name += '.pdf'
-            printer.setOutputFileName(name)
-        printer.setResolution(Preferences.getPrinter("Resolution"))
+        if hasattr(browser.page(), "printToPdf"):
+            from .Tools.PrintToPdfDialog import PrintToPdfDialog
+            if not name:
+                name = "printout.pdf"
+            dlg = PrintToPdfDialog(os.path.abspath(name), self)
+            if dlg.exec_() == QDialog.Accepted:
+                filePath, pageLayout = dlg.getData()
+                if filePath:
+                    browser.page().printToPdf(
+                        lambda p: self.__pdfGenerated(filePath, p),
+                        pageLayout)
+        else:
+            printer = QPrinter(mode=QPrinter.HighResolution)
+            if Preferences.getPrinter("ColorMode"):
+                printer.setColorMode(QPrinter.Color)
+            else:
+                printer.setColorMode(QPrinter.GrayScale)
+            printerName = Preferences.getPrinter("PrinterName")
+            if printerName:
+                printer.setPrinterName(printerName)
+            printer.setOutputFormat(QPrinter.PdfFormat)
+            if name:
+                printer.setOutputFileName(name)
+            printer.setResolution(Preferences.getPrinter("Resolution"))
+            
+            printDialog = QPrintDialog(printer, self)
+            if printDialog.exec_() == QDialog.Accepted:
+                browser.render(printer)
+    
+    def __pdfGenerated(self, filePath, pdfData):
+        """
+        Public slot handling the generated PDF data.
         
-        printDialog = QPrintDialog(printer, self)
-        if printDialog.exec_() == QDialog.Accepted:
-            browser.render(printer)
+        @param filePath path to save the PDF to
+        @type str
+        @param pdfData generated PDF document
+        @type QByteArray
+        """
+        if pdfData.size() == 0:
+            return
+        
+        pdfFile = QFile(filePath)
+        if not pdfFile.open(QFile.WriteOnly):
+            return
+        
+        pdfFile.write(pdfData)
+        pdfFile.close()
     
     @pyqtSlot()
     def printPreviewBrowser(self, browser=None):

eric ide

mercurial