diff -r cd2a891703d3 -r 318e879a37fa WebBrowser/Tools/PrintToPdfDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebBrowser/Tools/PrintToPdfDialog.py Wed Jul 13 14:09:52 2016 +0200 @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to enter the data for printing a web page to PDF. +""" + +from __future__ import unicode_literals + +from PyQt5.QtCore import pyqtSlot, QMarginsF +from PyQt5.QtGui import QPageLayout, QPageSize +from PyQt5.QtPrintSupport import QPrinter, QPageSetupDialog +from PyQt5.QtWidgets import QDialog + +from E5Gui.E5PathPicker import E5PathPickerModes + +from .Ui_PrintToPdfDialog import Ui_PrintToPdfDialog + + +class PrintToPdfDialog(QDialog, Ui_PrintToPdfDialog): + """ + Class implementing a dialog to enter the data for printing a web page to + PDF. + """ + def __init__(self, filePath, parent=None): + """ + Constructor + + @param filePath path of the file to write into + @type str + @param parent reference to the parent widget + @type QWidget + """ + super(PrintToPdfDialog, self).__init__(parent) + self.setupUi(self) + + self.pdfFilePicker.setMode(E5PathPickerModes.SaveFileOverwriteMode) + self.pdfFilePicker.setFilters(self.tr( + "PDF Files (*.pdf);;" + "All Files (*)")) + self.pdfFilePicker.setText(filePath, toNative=True) + + self.__currentPageLayout = QPageLayout( + QPageSize(QPageSize.A4), QPageLayout.Portrait, + QMarginsF(0.0, 0.0, 0.0, 0.0)) + + self.__updatePageLayoutLabel() + + @pyqtSlot() + def on_pageLayoutButton_clicked(self): + """ + Private slot to define the page layout. + """ + printer = QPrinter() + printer.setPageLayout(self.__currentPageLayout) + + dlg = QPageSetupDialog(printer, self) + if dlg.exec_() == QDialog.Accepted: + self.__currentPageLayout = printer.pageLayout() + self.__updatePageLayoutLabel() + + def __updatePageLayoutLabel(self): + """ + Private method to update the page layout label. + """ + if self.__currentPageLayout.orientation() == QPageLayout.Portrait: + orientation = self.tr("Portrait") + else: + orientation = self.tr("Landscape") + self.pageLayoutLabel.setText( + self.tr("{0}, {1}", "page size, page orientation").format( + self.__currentPageLayout.pageSize().name(), + orientation)) + + def getData(self): + """ + Public method to get the dialog data. + + @return tuple containing the file path and the page layout + @rtype tuple of str and QPageLayout + """ + return ( + self.pdfFilePicker.text(toNative=True), + self.__currentPageLayout, + )