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):