Search code examples
pythonpyqtprint-previewpage-numbering

Change or remove page numbering in QPrintPreviewWidget


Is it possible to delete/change the page numeration in QPrintPreviewWidget? I tried to "delete" it by setting the page margins to (0, 10, 0, 3). In the print-preview dialog it looks fine: the page number goes beyond the page border. But when I print pages, there are still page numbers.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
import sys

html_text = """
        <html><head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>
        <body>
            <p><span style=" font-size:20pt; font-weight:600;">QTextEdit</span></p>
        </body></html>
        """

class Preview(QtGui.QMainWindow):
    def __init__(self):
        super(Preview, self).__init__()

        self.textedit = QtGui.QTextEdit()
        codec = QtCore.QTextCodec.codecForHtml(html_text)
        unucode_string = codec.toUnicode(html_text)
        self.textedit.setHtml(unucode_string)    

        self.preview_widget = QtGui.QPrintPreviewWidget(self)
        self.preview_widget.resize(1100, 800)
        self.preview_widget.move(50, 50)
        self.preview_widget.paintRequested.connect(self.print_preview)
        self.preview_widget.updatePreview()

        self.resize(1200, 820)
        self.show()


    def print_preview(self, printer):
        printer.setOrientation(1)
        printer.setPageSize(8)

        # this is my attempt to solve problem:
        # printer.setPageMargins(0, 10, 0, 3, 0)

        self.textedit.print_(printer)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    mainWindows = []
    for fn in sys.argv[1:] or [None]:
        preview = Preview()
        preview.show()
        mainWindows.append(preview)

    sys.exit(app.exec_())

enter image description here


Solution

  • Try setting the page-size of the document. Below is a demo based on your example. (Note that if you use a text-widget to hold the html, you must show it, otherwise the page-resizing will not work correctly).

    import sys
    from PyQt4 import QtGui, QtCore
    
    html = """<html><body>%s</body></html>""" % """
    <p><span style=" font-size:20pt; font-weight:600;">QTextEdit</span></p>
    """ * 20
    
    class Window(QtGui.QMainWindow):
        def __init__(self):
            super(Window, self).__init__()
            self.document = QtGui.QTextDocument(self)
            self.document.setHtml(html)
            self.preview = QtGui.QPrintPreviewWidget(self)
            self.preview.paintRequested.connect(self.handlePaintRequest)
            self.setCentralWidget(self.preview)
    
        def handlePaintRequest(self, printer):
            printer.setOrientation(QtGui.QPrinter.Landscape)
            printer.setPageSize(QtGui.QPrinter.A3)
            self.document.setPageSize(
                QtCore.QSizeF(printer.width(), printer.height()))
            self.document.print_(printer)
    
    if __name__ == '__main__':
    
        app = QtGui.QApplication(sys.argv)
        window = Window()
        window.setGeometry(600, 100, 1200, 800)
        window.show()
        sys.exit(app.exec_())