January 18, 2023

Как преобразовать локальный html-файл в pdf с помощью PyQt5?

Вы должны передать путь к файлу как url с помощью QUrl.fromLocalFile(), также не нужно создавать QWebEngineView, а просто использовать QWebEnginePage:


import os
import sys

from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets


def html_to_pdf(html, pdf):
    app = QtWidgets.QApplication(sys.argv)

    page = QtWebEngineWidgets.QWebEnginePage()

    def handle_print_finished(filename, status):
        print("finished", filename, status)
        QtWidgets.QApplication.quit()

    def handle_load_finished(status):
        if status:
            page.printToPdf(pdf)
        else:
            print("Failed")
            QtWidgets.QApplication.quit()

    page.pdfPrintingFinished.connect(handle_print_finished)
    page.loadFinished.connect(handle_load_finished)
    page.load(QtCore.QUrl.fromLocalFile(html))
    app.exec_()


if __name__ == "__main__":

    CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
    filename = os.path.join(CURRENT_DIR, "index.html")
    print(filename)

    html_to_pdf(filename, "test.pdf")