如何在PyQt中使用pdf.js查看器呈现PDF?

问题描述 投票:3回答:2

我已经尝试在我的项目中添加pdf.js查看器文件,它可以在Chrome,Mozilla,Safari等浏览器中使用,但它不会在node-webkit和PyQt webkit中加载一些页面。

我正在尝试使用iframe加载文件,如下所示:

<iframe src="/test/?file=/assets/pdf/example.pdf#page=3"> </iframe>
python pyqt qtwebkit pdf.js qtwebengine
2个回答
5
投票

I've found this thread over at the Qt Forums,thebeast44发布了一段Qt代码回答你的问题。我对python的翻译如下。

您还需要从author's original code解压缩res文件夹,我认为他只是修改了查看器...我还附加了代码here

from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4 import QtNetwork
from PyQt4 import QtWebKit


class PDFViewer(QtWebKit.QWebView):
    pdf_viewer_page = 'res/pdf-viewer.html'

    def __init__(self, parent=None):
        super().__init__(parent)
        self.settings = QtWebKit.QWebSettings.globalSettings()
        self.settings.setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessFileUrls, True )
        self.settings.setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True )
        self.settings.setAttribute(QtWebKit.QWebSettings.DeveloperExtrasEnabled, True )
        nam = QtNetwork.QNetworkAccessManager()
        page = QtWebKit.QWebPage(self)
        page.setNetworkAccessManager(nam)
        self.setPage(page)
        self.loadFinished.connect(self.onLoadFinish)
        self.setUrl(QtCore.QUrl(self.pdf_viewer_page))

    def onLoadFinish(self, success):
        if success:
            self.page().mainFrame().evaluateJavaScript("init();")


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    viewer = PDFViewer(parent=None)
    viewer.show()
    sys.exit(app.exec_())

3
投票

下面是一些使用pdf.js和PyQt4 / QtWebKit或PyQt5 / QtWebEngine的最新演示脚本。要尝试这些,首先download the latest stable version of pdf.js并将zip文件解压缩到合适的位置。 (注意:如果你在Linux上,你的发行版可能已经有一个pdf.js包,所以可以安装它)。

PyQt4 / QtWebKit脚本:

import sys
from PyQt4 import QtCore, QtGui, QtWebKit

PDFJS = 'file:///path/to/pdfjs-1.9.426-dist/web/viewer.html'
# PDFJS = 'file:///usr/share/pdf.js/web/viewer.html'
PDF = 'file:///path/to/my/sample.pdf'

class Window(QtWebKit.QWebView):
    def __init__(self):
        super(Window, self).__init__()
        self.load(QtCore.QUrl.fromUserInput('%s?file=%s' % (PDFJS, PDF)))

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 50, 800, 600)
    window.show()
    sys.exit(app.exec_())

PyQt5 / QtWebEngine脚本:

import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets

PDFJS = 'file:///path/to/pdfjs-1.9.426-dist/web/viewer.html'
# PDFJS = 'file:///usr/share/pdf.js/web/viewer.html'
PDF = 'file:///path/to/my/sample.pdf'

class Window(QtWebEngineWidgets.QWebEngineView):
    def __init__(self):
        super(Window, self).__init__()
        self.load(QtCore.QUrl.fromUserInput('%s?file=%s' % (PDFJS, PDF)))

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 50, 800, 600)
    window.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.