|
| 1 | +# coding:utf-8 |
| 2 | +# @文件: report_html2pdf.py |
| 3 | +# @创建者:州的先生 |
| 4 | +# #日期:2020/12/27 |
| 5 | +# 博客地址:zmister.com |
| 6 | + |
| 7 | +import sys |
| 8 | +from urllib.parse import quote |
| 9 | +from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, QtGui |
| 10 | +# print(sys.path) |
| 11 | + |
| 12 | + |
| 13 | +def html2pdf(html_path,pdf_path): |
| 14 | + html_path = '/'.join(html_path.split('\\')) |
| 15 | + html_path = quote(html_path, safe='/:?=') |
| 16 | + # 实例化一个Qt应用 |
| 17 | + app = QtWidgets.QApplication(sys.argv) |
| 18 | + # 实例化一个WebEngineView |
| 19 | + loader = QtWebEngineWidgets.QWebEngineView() |
| 20 | + # 设置视图缩放比例 |
| 21 | + loader.setZoomFactor(1) |
| 22 | + # 设置页码打印完成后的槽 |
| 23 | + loader.page().pdfPrintingFinished.connect(loader.close) |
| 24 | + # 请求HTML文件 |
| 25 | + loader.load(QtCore.QUrl("file:///{}".format(html_path))) |
| 26 | + |
| 27 | + def emit_pdf(finished): |
| 28 | + layout = QtGui.QPageLayout() |
| 29 | + layout.setPageSize(QtGui.QPageSize(QtGui.QPageSize.A4Extra)) |
| 30 | + layout.setLeftMargin(20) |
| 31 | + layout.setRightMargin(20) |
| 32 | + layout.setTopMargin(20) |
| 33 | + layout.setBottomMargin(20) |
| 34 | + layout.setOrientation(QtGui.QPageLayout.Portrait) |
| 35 | + loader.page().printToPdf(pdf_path, pageLayout=layout) |
| 36 | + |
| 37 | + # 加载完成后连接到PDF打印方法 |
| 38 | + loader.loadFinished.connect(emit_pdf) |
| 39 | + app.exec_() |
| 40 | + |
| 41 | + |
| 42 | +if __name__ == '__main__': |
| 43 | + # print(sys.argv) |
| 44 | + html_path, pdf_path = sys.argv[1],sys.argv[2] |
| 45 | + html2pdf(html_path=html_path,pdf_path=pdf_path) |
0 commit comments