如何解决使用PyQt5将多个HTML文件转换为PDF
我尝试遵循以下答案:How to use PyQT5 to convert multiple HTML docs to PDF in one loop
我对其进行了修改,以转换在本地文件夹中找到的所有html文件。例如htmls是要转换的html文件的列表:[Q:\ Ray \ test1.html,Q:\ Ray \ prac2.html]
这是代码。但是,当我尝试运行它时,Python会冻结,我必须停止运行。
import os
import glob
from PyQt5 import QtWidgets,QtWebEngineWidgets
class PdfPage(QtWebEngineWidgets.QWebEnginePage):
def __init__(self):
super().__init__()
self._htmls = []
self._current_path = ""
self.setZoomFactor(1)
self.loadFinished.connect(self._handleLoadFinished)
self.pdfPrintingFinished.connect(self._handlePrintingFinished)
def convert(self,htmls):
self._htmls = iter(zip(htmls))
self._fetchNext()
def _fetchNext(self):
try:
self._current_path = next(self._htmls)
except StopIteration:
return False
def _handleLoadFinished(self,ok):
if ok:
self.printToPdf(self._current_path)
def _handlePrintingFinished(self,filePath,success):
print("finished:",success)
if not self._fetchNext():
QtWidgets.QApplication.quit()
if __name__ == "__main__":
current_dir = os.path.dirname(os.path.realpath(__file__))
folder= current_dir+ '\\*.HTML'
htmls= glob.glob(folder)
app = QtWidgets.QApplication([])
page = PdfPage()
page.convert(htmls)
app.exec_()
print("finished")
解决方法
OP似乎不了解我以前的解决方案的逻辑:
- 获取资源(在本例中为文件)
- 将其加载到页面上,
- 加载完成后,打印页面内容,
- 打印完成后,使用下一个资源执行步骤1。
在这种情况下,它不执行步骤2,另一方面,建议pdf的路径使用除html之外的名称
import os
import glob
from PyQt5.QtCore import QUrl
from PyQt5 import QtWidgets,QtWebEngineWidgets
class PdfPage(QtWebEngineWidgets.QWebEnginePage):
def __init__(self):
super().__init__()
self._htmls = []
self._current_path = ""
self.setZoomFactor(1)
self.loadFinished.connect(self._handleLoadFinished)
self.pdfPrintingFinished.connect(self._handlePrintingFinished)
def convert(self,htmls):
self._htmls = iter(htmls)
self._fetchNext()
def _fetchNext(self):
try:
self._current_path = next(self._htmls)
except StopIteration:
return False
else:
self.load(QUrl.fromLocalFile(self._current_path))
return True
def _handleLoadFinished(self,ok):
if ok:
self.printToPdf(self._current_path + ".pdf")
def _handlePrintingFinished(self,filePath,success):
print("finished:",success)
if not self._fetchNext():
QtWidgets.QApplication.quit()
if __name__ == "__main__":
current_dir = os.path.dirname(os.path.realpath(__file__))
folder= current_dir+ '\\*.HTML'
htmls = glob.glob(folder)
print(htmls)
if htmls:
app = QtWidgets.QApplication([])
page = PdfPage()
page.convert(htmls)
app.exec_()
print("finished")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。