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())