亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號