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

时间:2018-11-09 10:53:09

标签: python pyqt pyqt5

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

1 个答案:

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