如何在Qprinter pyqt5中打印带有图像的html页面

2021-03-05 23:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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代码。 这个页眉.jpeg在同一目录中。在

1条回答
网友
1楼 ·

qtwebengine在打印时异步执行任务,由于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)

相关问题