PyQt5在打印机上打印当前整页

时间:2019-05-29 08:33:59

标签: python pyqt5 qpainter qtwebengine qprinter

我想在自定义浏览器中提供打印选项,以供用户在打印机上打印当前页面。

我正在使用QPrinterQPainter进行打印,但仅打印当前窗口大小,即页面的一半

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtPrintSupport, QtWebEngineWidgets


class main(QtWebEngineWidgets.QWebEngineView):
    def __init__(self,windows,parent = None):
        super(main,self).__init__(parent)

        self._windows = windows
        self._windows.append(self)
        self.load(QtCore.QUrl('https://gmail.com'))

    #Menu items on mouse Right click for Print 
    def contextMenuEvent(self, event):       
        cmenu = QtWidgets.QMenu(self)

        printAct = cmenu.addAction("print")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))
        if action == printAct:
            self.print_ww()

    def createWindow(self, windows):
        if windows == QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
            webView = main(self._windows)
            webView.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
            webView.resize(900, 780) # <----
            webView.show()
            return webView
        elif windows == QtWebEngineWidgets.QWebEnginePage.WebDialog:
            webView = main(self._windows)
            webView.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
            webView.resize(900, 780) # <----
            webView.show()
            return webView
        return super(main, self).createWindow(windows)

    def print_ww(self):
        printer = QtPrintSupport.QPrinter()
        printer.fullPage()
        painter = QtGui.QPainter()
        painter.begin(printer)
        screen = self.grab()
        painter.drawPixmap(0, 0, screen)
        painter.end()

        #Used to save page() as PDF
        # pdf_test = self.page().printToPdf("new_test.png")

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    windows = []
    web = main(windows)
    web.show()
    sys.exit(app.exec_())

当我右键单击并按打印选项时,它仅打印页面的一半或窗口大小。我想在A4尺寸的纸张上打印整个页面,如果宽度较大,则尺寸应该变小。

0 个答案:

没有答案