为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 PyQt5 将本地 html 文件转换为 pdf?

如何使用 PyQt5 将本地 html 文件转换为 pdf?

慕侠2389804 2023-05-16 14:44:11
我尝试过使用 wkhtml 和 weasyprint 库,但所有这些库都呈现一个空白的 pdf 页面。唯一可行的选项是 pdfcrowd,但这是一个付费图书馆。我找到了几个使用 PyQt 转换网页的选项:import sysfrom PyQt5 import QtCore, QtWidgets, QtWebEngineWidgetsapp = QtWidgets.QApplication(sys.argv)loader = QtWebEngineWidgets.QWebEngineView()loader.setZoomFactor(1)loader.page().pdfPrintingFinished.connect(    lambda *args: print('finished:', args))loader.load(QtCore.QUrl('https://en.wikipedia.org/wiki/Main_Page'))def emit_pdf(finished):    loader.show()    loader.page().printToPdf("test.pdf")loader.loadFinished.connect(emit_pdf)app.exec()但是,我不太确定如何使它适应本地保存的 html 文件。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您必须使用 QUrl.fromLocalFile() 将文件路径作为 url 传递,也没有必要创建 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")


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信