【问题标题】:Pdfjs print button does not work with PyQt5Pdfjs 打印按钮不适用于 PyQt5
【发布时间】:2019-11-14 07:28:24
【问题描述】:

直接发布,当 pdf 将 pdfjs 加载到 pyqt5 中时,打印按钮似乎无法正常工作,下载按钮也是如此。

如何修复这个错误?

代码:

import sys
from PyQt5 import QtCore, QtWidgets, QtGui, QtWebEngineWidgets

PDFJS = 'file:///pdfjs/web/viewer.html'
PDF = 'file:///file0.pdf'
class PdfReport(QtWebEngineWidgets.QWebEngineView):
    def __init__(self, parent=None):
        super(PdfReport, self).__init__(parent)
        self.load(QtCore.QUrl.fromUserInput('%s?file=%s' % (PDFJS, PDF)))  

    def sizeHint(self):
        return QtCore.QSize(640, 480)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    im = PdfReport()
    im.show()
    sys.exit(app.exec_())

显示:

知道如何解决这个问题吗?

【问题讨论】:

    标签: python pyqt pyqt5 pdfjs qprinter


    【解决方案1】:

    Qt WebEngine 中未启用打印任务,因此显示了错误(我仍在尝试获取数据)。但是对于 PDF 的下载按钮是可能的,为此您必须使用 QWebEngineProfiledownloadRequested 信号:

    import os
    import sys
    from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
    
    CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
    
    PDFJS = QtCore.QUrl.fromLocalFile(
        os.path.join(CURRENT_DIR, "pdfjs/web/viewer.html")
    ).toString()
    
    
    class PdfReport(QtWebEngineWidgets.QWebEngineView):
        def __init__(self, parent=None):
            super(PdfReport, self).__init__(parent)
            QtWebEngineWidgets.QWebEngineProfile.defaultProfile().downloadRequested.connect(
                self.on_downloadRequested
            )
    
        def load_pdf(self, filename):
            url = QtCore.QUrl.fromLocalFile(filename).toString()
            self.load(QtCore.QUrl.fromUserInput("%s?file=%s" % (PDFJS, url)))
    
        def sizeHint(self):
            return QtCore.QSize(640, 480)
    
        @QtCore.pyqtSlot(QtWebEngineWidgets.QWebEngineDownloadItem)
        def on_downloadRequested(self, download):
            path, _ = QtWidgets.QFileDialog.getSaveFileName(
                self, "Save File", "sample.pdf", "*.pdf"
            )
            if path:
                download.setPath(path)
                download.accept()
    
    
    if __name__ == "__main__":
    
        app = QtWidgets.QApplication(sys.argv)
        w = PdfReport()
        path = os.path.join(CURRENT_DIR, "file0.pdf")
        w.load_pdf(path)
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 非常感谢,它运行良好。当您解决打印按钮功能的难题时,请让我通知。
    【解决方案2】:

    这不是 PyQt5 按钮,而是您的 Web 视图中的按钮。由于您的 webView 对象或您的代码的 Web 部分缺少按钮的功能,它可能无法正常工作。

    【讨论】:

    • 我明白这不是 pyqt5 按钮,您是否尝试过查看 pdfjs online 工作正常,一旦在 PyQT5 中打开它就无法完成工作?
    • 尝试使用 PyQt5 浏览器,如果你没有遇到同样的问题,那是 PyQt 的 webView 的问题,如果你仍然遇到问题,那是你的代码的 web 部分或 PyQt 的 web 的问题解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2018-02-25
    • 2017-12-17
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多