1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
from PyQt5 import QtWidgets, QtPrintSupport, QtGui

class PrintViewer(QtWidgets.QWidget):

    def __init__(self, argv):
        super(PrintViewer, self).__init__(None)
        self.setWindowTitle('PrintViewer')
        self.preview_widget = QtPrintSupport.QPrintPreviewWidget(self)
        grid = QtWidgets.QGridLayout()
        grid.addWidget(self.preview_widget, 0, 0)
        self.setLayout(grid)
        self.resize(600, 800)
        self.document = QtGui.QTextDocument()
        inputfile = open(argv[1], 'rt')
        self.preview_widget
        self.document.setHtml(inputfile.read())
        inputfile.close()
        self.preview_widget.paintRequested.connect(self.paint_requested)
        self.preview_widget.updatePreview()
        if len(argv) > 2:
            outfile = open(argv[2], 'wt')
            outfile.write(self.document.toHtml())
            outfile.close()

    def paint_requested(self, printer):
        self.document.print_(printer)


if __name__ == '__main__':
    if len(sys.argv) == 1:
        print('Usages: %s <input html file> <optional output html file>' % sys.argv[0])
        exit()
    app = QtWidgets.QApplication(sys.argv)
    window = PrintViewer(sys.argv)
    window.show()
    sys.exit(app.exec())