9 |
9 |
10 from __future__ import unicode_literals |
10 from __future__ import unicode_literals |
11 |
11 |
12 import os |
12 import os |
13 |
13 |
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl |
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QFile |
15 from PyQt5.QtGui import QIcon |
15 from PyQt5.QtGui import QIcon |
16 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog |
16 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog |
17 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog |
17 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog |
18 |
18 |
19 from E5Gui.E5TabWidget import E5TabWidget |
19 from E5Gui.E5TabWidget import E5TabWidget |
560 @param browser reference to the browser to be printed (HelpBrowser) |
560 @param browser reference to the browser to be printed (HelpBrowser) |
561 """ |
561 """ |
562 if browser is None: |
562 if browser is None: |
563 browser = self.currentBrowser() |
563 browser = self.currentBrowser() |
564 |
564 |
565 printer = QPrinter(mode=QPrinter.HighResolution) |
|
566 if Preferences.getPrinter("ColorMode"): |
|
567 printer.setColorMode(QPrinter.Color) |
|
568 else: |
|
569 printer.setColorMode(QPrinter.GrayScale) |
|
570 printerName = Preferences.getPrinter("PrinterName") |
|
571 if printerName: |
|
572 printer.setPrinterName(printerName) |
|
573 printer.setOutputFormat(QPrinter.PdfFormat) |
|
574 name = WebBrowserTools.getFileNameFromUrl(browser.url()) |
565 name = WebBrowserTools.getFileNameFromUrl(browser.url()) |
575 if name: |
566 if name: |
576 name = name.rsplit('.', 1)[0] |
567 name = name.rsplit('.', 1)[0] |
577 name += '.pdf' |
568 name += '.pdf' |
578 printer.setOutputFileName(name) |
569 if hasattr(browser.page(), "printToPdf"): |
579 printer.setResolution(Preferences.getPrinter("Resolution")) |
570 from .Tools.PrintToPdfDialog import PrintToPdfDialog |
580 |
571 if not name: |
581 printDialog = QPrintDialog(printer, self) |
572 name = "printout.pdf" |
582 if printDialog.exec_() == QDialog.Accepted: |
573 dlg = PrintToPdfDialog(os.path.abspath(name), self) |
583 browser.render(printer) |
574 if dlg.exec_() == QDialog.Accepted: |
|
575 filePath, pageLayout = dlg.getData() |
|
576 if filePath: |
|
577 browser.page().printToPdf( |
|
578 lambda p: self.__pdfGenerated(filePath, p), |
|
579 pageLayout) |
|
580 else: |
|
581 printer = QPrinter(mode=QPrinter.HighResolution) |
|
582 if Preferences.getPrinter("ColorMode"): |
|
583 printer.setColorMode(QPrinter.Color) |
|
584 else: |
|
585 printer.setColorMode(QPrinter.GrayScale) |
|
586 printerName = Preferences.getPrinter("PrinterName") |
|
587 if printerName: |
|
588 printer.setPrinterName(printerName) |
|
589 printer.setOutputFormat(QPrinter.PdfFormat) |
|
590 if name: |
|
591 printer.setOutputFileName(name) |
|
592 printer.setResolution(Preferences.getPrinter("Resolution")) |
|
593 |
|
594 printDialog = QPrintDialog(printer, self) |
|
595 if printDialog.exec_() == QDialog.Accepted: |
|
596 browser.render(printer) |
|
597 |
|
598 def __pdfGenerated(self, filePath, pdfData): |
|
599 """ |
|
600 Public slot handling the generated PDF data. |
|
601 |
|
602 @param filePath path to save the PDF to |
|
603 @type str |
|
604 @param pdfData generated PDF document |
|
605 @type QByteArray |
|
606 """ |
|
607 if pdfData.size() == 0: |
|
608 return |
|
609 |
|
610 pdfFile = QFile(filePath) |
|
611 if not pdfFile.open(QFile.WriteOnly): |
|
612 return |
|
613 |
|
614 pdfFile.write(pdfData) |
|
615 pdfFile.close() |
584 |
616 |
585 @pyqtSlot() |
617 @pyqtSlot() |
586 def printPreviewBrowser(self, browser=None): |
618 def printPreviewBrowser(self, browser=None): |
587 """ |
619 """ |
588 Public slot called to show a print preview of the displayed file. |
620 Public slot called to show a print preview of the displayed file. |