diff -r ebab8ba287e6 -r 6b42677d7043 eric6/WebBrowser/WebBrowserTabWidget.py --- a/eric6/WebBrowser/WebBrowserTabWidget.py Sun Sep 01 19:58:00 2019 +0200 +++ b/eric6/WebBrowser/WebBrowserTabWidget.py Mon Sep 02 18:50:38 2019 +0200 @@ -11,8 +11,7 @@ import os -from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \ - QFileDevice, QTemporaryFile +from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QFile, QFileDevice from PyQt5.QtGui import QIcon, QPixmap, QPainter from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, \ QDialog, QApplication @@ -25,7 +24,6 @@ from .WebBrowserView import WebBrowserView from .WebBrowserPage import WebBrowserPage from .Tools import WebBrowserTools -from .Tools import FilePrinter from . import WebInspector import UI.PixmapCache @@ -33,11 +31,27 @@ import Utilities import Preferences import Globals -from Globals import qVersionTuple from eric6config import getConfig +def isCupsAvailable(): + """ + Static method to test the availability of CUPS. + + @return flag indicating the availability of CUPS + @rtype bool + """ + if Globals.isMacPlatform(): + # OS X/MacOS always have CUPS + return True + elif Globals.isLinuxPlatform(): + testPrinter = QPrinter() + return testPrinter.supportsMultipleCopies() + else: + return False + + class WebBrowserTabWidget(E5TabWidget): """ Class implementing the central widget showing the web pages. @@ -142,8 +156,6 @@ self.__initTabContextMenu() self.__historyCompleter = None - - self.__pdfPrinter = None def __initTabContextMenu(self): """ @@ -173,20 +185,15 @@ self.__tabContextMenu.addAction( self.tr('Close All'), self.closeAllBrowsers) self.__tabContextMenu.addSeparator() - if qVersionTuple() >= (5, 8, 0) or ( - not Globals.isWindowsPlatform() and qVersionTuple() < (5, 7, 0)): - self.__tabContextMenu.addAction( - UI.PixmapCache.getIcon("printPreview.png"), - self.tr('Print Preview'), self.__tabContextMenuPrintPreview) - if qVersionTuple() >= (5, 8, 0) or ( - not Globals.isWindowsPlatform() or qVersionTuple() >= (5, 7, 0)): - self.__tabContextMenu.addAction( - UI.PixmapCache.getIcon("print.png"), - self.tr('Print'), self.__tabContextMenuPrint) - if Globals.isLinuxPlatform() or qVersionTuple() >= (5, 7, 0): - self.__tabContextMenu.addAction( - UI.PixmapCache.getIcon("printPdf.png"), - self.tr('Print as PDF'), self.__tabContextMenuPrintPdf) + self.__tabContextMenu.addAction( + UI.PixmapCache.getIcon("printPreview.png"), + self.tr('Print Preview'), self.__tabContextMenuPrintPreview) + self.__tabContextMenu.addAction( + UI.PixmapCache.getIcon("print.png"), + self.tr('Print'), self.__tabContextMenuPrint) + self.__tabContextMenu.addAction( + UI.PixmapCache.getIcon("printPdf.png"), + self.tr('Print as PDF'), self.__tabContextMenuPrintPdf) self.__tabContextMenu.addSeparator() if hasattr(WebBrowserPage, "isAudioMuted"): self.__audioAct = self.__tabContextMenu.addAction( @@ -660,29 +667,11 @@ printDialog.setOptions(QAbstractPrintDialog.PrintToFile | QAbstractPrintDialog.PrintShowPageSize) if not Globals.isWindowsPlatform(): - if FilePrinter.isCupsAvailable(): + if isCupsAvailable(): printDialog.setOption(QAbstractPrintDialog.PrintCollateCopies) printDialog.setOption(QAbstractPrintDialog.PrintPageRange) if printDialog.exec_() == QDialog.Accepted: - if hasattr(browser.page(), "print"): - # Qt >= 5.8.0 - browser.page().execPrintPage(printer, 10 * 1000) - elif hasattr(browser.page(), "printToPdf"): - # Qt >= 5.7.0 - if printer.outputFormat() == QPrinter.PdfFormat: - # print to PDF file selected - browser.page().printToPdf( - lambda pdf: self.__pdfGeneratedForSave( - printer.outputFileName(), pdf), - printer.pageLayout()) - else: - # print to printer - self.__pdfPrinter = printer - browser.page().printToPdf( - self.__pdfGeneratedForPrinting, - printer.pageLayout()) - else: - browser.render(printer) + browser.page().execPrintPage(printer, 10 * 1000) @pyqtSlot() def printBrowserPdf(self, browser=None): @@ -766,38 +755,6 @@ E5MessageBox.StandardButtons( E5MessageBox.Ok)) - def __pdfGeneratedForPrinting(self, pdfData): - """ - Private slot to print the generated PDF data. - - @param pdfData generated PDF document - @type QByteArray - """ - if self.__pdfPrinter is None or pdfData.isEmpty(): - return - - tempFile = QTemporaryFile(QDir.tempPath() + "/ericBrowserXXXXXX.pdf") - tempFile.setAutoRemove(False) - if tempFile.open(): - bytesWritten = tempFile.write(pdfData) - tempFile.close() - if bytesWritten == pdfData.size(): - if Globals.isWindowsPlatform(): - printerName = self.__pdfPrinter.printerName() - import ctypes - ctypes.windll.shell32.ShellExecuteW( - None, "printto", tempFile.fileName(), - '"{0}"'.format(printerName), None, 0) - else: - FilePrinter.printFile( - self.__pdfPrinter, tempFile.fileName(), - FilePrinter.FilePrinter.SystemDeletesFiles, - FilePrinter.FilePrinter.SystemSelectsPages) - else: - tempFile.remove() - - self.__pdfPrinter = None - @pyqtSlot() def printPreviewBrowser(self, browser=None): """ @@ -833,11 +790,8 @@ preview = QPrintPreviewDialog(printer, self) preview.resize(800, 750) - if qVersionTuple() >= (5, 8, 0): - preview.paintRequested.connect( - lambda p: self.__printPreviewRequested(p, browser)) - else: - preview.paintRequested.connect(lambda p: browser.render(p)) + preview.paintRequested.connect( + lambda p: self.__printPreviewRequested(p, browser)) preview.exec_() def __printPreviewRequested(self, printer, browser):