1

直截了当,当 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_())

展示:

在此处输入图像描述

知道如何解决吗?

4

2 回答 2

4

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

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_())
于 2019-07-04T05:21:05.510 回答
0

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

于 2019-07-03T15:03:46.347 回答