У меня нет опыта работы с Qt / PyQt.
Я просто пытаюсь использовать PyQt для возможностей веб-движка, чтобы «преобразовать» папку HTML-файлов в PDF-документы.
Код работает хорошо, если имеется только 1 html-файл, но при наличии нескольких html-файлов он генерирует pdf только для последнего файла в цикле .
Я думаю, что проблема должна быть связана с вещами Qt, циклами, событиями и т. Д., Но я понятия не имею, с чего начать. Как вы можете сказать, я использую только Qt для создания html-> pdf, я не заинтересован в создании GUI.
Я читал об использовании QApplication.processEvents()
в конце цикла, это может исправить, но результат был тот же.
Я попытался добавить в код режим сна / паузы, тоже самое.
import sys
import os
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QDir, QUrl
# read somewhere this is needed to load local html, works without for me though
sys.argv.append("--disable-web-security")
app = QApplication(sys.argv)
iter_num = 0
directory = 'my_webfile_directory'
for filename in os.listdir(directory):
if filename.endswith(".htm") or filename.endswith(".html"):
with open(os.path.join(directory, filename), 'r') as myfile:
print(filename)
raw_html = myfile.read()
# init qt web view
view = QWebEngineView()
view.setHtml(raw_html)
# set to close web view after pdf is created
view.page().pdfPrintingFinished.connect(view.close)
# generate filename
iter_num += 1
outputfilename = str(iter_num) + ".pdf"
outputfullpath = os.path.join(directory, outputfilename)
def save_pdf(finished):
view.page().printToPdf(outputfullpath)
# when web view is ready, save the pdf
view.loadFinished.connect(save_pdf)
# QApplication.processEvents()
app.exec()