gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:09:33 24 4
gpt4 key购买 nike

我尝试过使用 wkhtml 和 weasyprint 库,但所有这些库都呈现一个空白的 pdf 页面。唯一可行的选项是 pdfcrowd,但这是一个付费图书馆。我找到了几个使用 PyQt 转换网页的选项:

import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets

app = 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 文件。

最佳答案

您必须使用 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")

关于python - 如何使用 PyQt5 将本地 html 文件转换为 pdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63382399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com