如何在 Qprinter pyqt5 中打印带有图像的 html 页
how to print html page with image in Qprinter pyqt5
我已经使用 html 代码为我的程序生成了一份报告,但它没有在 Qprinter 中显示图像。
def run(self):
view = QtWebEngineWidgets.QWebEngineView()
view.setHtml("""<img src="header.jpeg" alt="logo" width="280" height="100">""")
printer = QPrinter()
printer.setPaperSize(QtCore.QSizeF(80 ,297), QPrinter.Millimeter)
try :
r = QPrintDialog(printer)
if r.exec_() == QPrintDialog.Accepted:
view.page().print(printer, self.print_completed)
except Exception as e :
print(e)
html 我要打印的代码。
同一目录中的 header.jpeg。
Qt Webengine 以打印的方式异步执行任务,由于view 和printer 是局部变量,它们将在同步函数完成时被消除。解决方案是即使您完成 运行 也保留这些对象。
不必使用 QWebEngineView,因为您不会显示任何内容,只会显示 QWebEnginePage。
另一方面,文档指出图像等外部资源是根据传递给第二个参数的 URL 加载的。所以解决办法就是以当前目录为基础传一个url
import os
# ...
def run(self):
current_dir = os.path.dirname(os.path.abspath(__file__))
self._page = QtWebEngineWidgets.QWebEnginePage()
self._page.setHtml('''
... <img src="header.jpeg" alt="logo" width="280" height="100"> ...
''', QtCore.QUrl.fromLocalFile(os.path.join(current_dir, "index.html")))
self._printer = QtPrintSupport.QPrinter()
self._printer.setPaperSize(QtCore.QSizeF(80 ,297), QtPrintSupport.QPrinter.Millimeter)
r = QtPrintSupport.QPrintDialog(self._printer)
if r.exec_() == QtPrintSupport.QPrintDialog.Accepted:
self._page.print(self._printer, self.print_completed)
我已经使用 html 代码为我的程序生成了一份报告,但它没有在 Qprinter 中显示图像。
def run(self):
view = QtWebEngineWidgets.QWebEngineView()
view.setHtml("""<img src="header.jpeg" alt="logo" width="280" height="100">""")
printer = QPrinter()
printer.setPaperSize(QtCore.QSizeF(80 ,297), QPrinter.Millimeter)
try :
r = QPrintDialog(printer)
if r.exec_() == QPrintDialog.Accepted:
view.page().print(printer, self.print_completed)
except Exception as e :
print(e)
html 我要打印的代码。 同一目录中的 header.jpeg。
Qt Webengine 以打印的方式异步执行任务,由于view 和printer 是局部变量,它们将在同步函数完成时被消除。解决方案是即使您完成 运行 也保留这些对象。
不必使用 QWebEngineView,因为您不会显示任何内容,只会显示 QWebEnginePage。
另一方面,文档指出图像等外部资源是根据传递给第二个参数的 URL 加载的。所以解决办法就是以当前目录为基础传一个url
import os
# ...
def run(self):
current_dir = os.path.dirname(os.path.abspath(__file__))
self._page = QtWebEngineWidgets.QWebEnginePage()
self._page.setHtml('''
... <img src="header.jpeg" alt="logo" width="280" height="100"> ...
''', QtCore.QUrl.fromLocalFile(os.path.join(current_dir, "index.html")))
self._printer = QtPrintSupport.QPrinter()
self._printer.setPaperSize(QtCore.QSizeF(80 ,297), QtPrintSupport.QPrinter.Millimeter)
r = QtPrintSupport.QPrintDialog(self._printer)
if r.exec_() == QtPrintSupport.QPrintDialog.Accepted:
self._page.print(self._printer, self.print_completed)