【问题标题】:PyQt5 possible to use QWebEngineView to print PDF in background, no GUI?PyQt5可以使用QWebEngineView在后台打印PDF,没有GUI?
【发布时间】:2018-11-09 10:53:08
【问题描述】:

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

【问题讨论】:

  • 你的 pyqt 版本是多少?

标签: python pyqt pyqt5


【解决方案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()

【讨论】:

  • 谢谢,但是:AttributeError: 'QWebEnginePage' 对象没有属性 'pdfPrintingFinished'
  • @BenKailon 更新你的 pyqt5,pdfPrintingFinished 信号最近在 Qt 5.9 中实现
  • @eyllanesc 啊,它是 5.8.1,我什至没有想到这一点。对不起。现在,更新后,我得到一个不同的错误。 ImportError: cannot import name 'QtWebEngineWidgets' 经过一番研究,看起来 pip 安装的 32 位 Windows PyQt5 轮子不再具有 QtWebEngineWidgets...这变得复杂了!
  • 只是一个win32问题,但是将pyqt5降级到5.10后,它工作得很好。谢谢你们俩。
猜你喜欢
  • 2020-04-13
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
相关资源
最近更新 更多