PyQt5是否可以使用QWebEngineView在后台打印PDF,没有GUI



我想使用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_())

试试看:

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()

最新更新