我想使用Python将一些html文件转换为PDF。 在查看了模块和执行此操作的可能性之后,我选择了Qt5。
我有可以工作的代码,但是它并不能完全按照我的要求工作。 我想通过命令行运行程序,并在完成后退出。 目前,它会生成PDF,但仍可运行。
如果取消注释并使用view.show()显示QWebEngineView,则可以关闭打开的窗口,程序将退出。 (但是我不想有任何GUI,所以这不好)
接下来,我尝试显示该视图,然后在使用view.close()之后立即将其关闭,但是当我这样做时,不会生成PDF。我尝试在view.show()之后和view.close()之前添加5秒钟的睡眠,但结果仍然相同。
我不确定我想要的是否可行,我知道Qt适用于GUI,但是如果我可以通过命令行完全使用它,将会非常方便。
import sys
import os
from time import sleep
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QDir, QUrl
# needed to load local html files
sys.argv.append("--disable-web-security")
app = QApplication(sys.argv)
raw_html = ""
with open('webpage.htm', 'r') as myfile:
raw_html = myfile.read()
view = QWebEngineView()
view.setHtml(raw_html)
def save_pdf(finished):
view.page().printToPdf("output.pdf")
# view.show()
# view.close()
view.loadFinished.connect(save_pdf)
sys.exit(app.exec_())
答案 0 :(得分:1)
尝试一下:
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
app = QtWidgets.QApplication(sys.argv)
loader = QtWebEngineWidgets.QWebEngineView()
loader.setZoomFactor(1)
loader.page().pdfPrintingFinished.connect(loader.close) # <---
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()