【问题标题】:how to print html page with image in Qprinter pyqt5如何在Qprinter pyqt5中打印带有图像的html页面
【发布时间】:2019-07-09 23:44:56
【问题描述】:

我已经使用 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。

【问题讨论】:

    标签: python pyqt pyqt5 qtwebengine qprinter


    【解决方案1】:

    Qt Webengine 像打印一样异步执行任务,由于视图和打印机是局部变量,它们将在同步功能完成时被消除。解决方案是即使在您完成运行时也保留这些对象。

    没有必要使用 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)
    

    【讨论】:

    • 我照你说的做了,但是打印出来的图片还是没有显示出来。
    • @Hackerpoint 图片?你的意思是什么图?你有pdf吗?在您的 HTML 中没有图像,您可以改进您的 minimal reproducible example
    • 我的 html 代码有 当我打开我的 html 文件时,我发现图像正确但打印时给我替换词,但不显示图像
    • @Hackerpoint 图片在哪里?您是否支持 .py ?请将该代码添加到您的问题中
    • @Hackerpoint 当你说:当我打开我的 html 你用什么打开它?用 google-chrome、firefox 还是什么?
    猜你喜欢
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-06-15
    • 2015-05-11
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多