写这篇文章主要是因为网上太多参差不齐的教学,坑害了不少人(包括我)
最近在做一个PyQt5的小项目,要在界面里内嵌pdf阅读器。相信这种需求应该比较常见把,但是网上就没一个靠谱的教学。
在网上找了一个手撸的阅读器,大致思路是把pdf当前页转化为图片,显示到一个Widget里面,然后左右点击翻页。但是体验远远不如浏览器内置的阅读器。
其实Qt从5.13起就在QWebEngineView中内嵌了pdf阅读器
pdfViewerEnabled : bool
Specifies that PDF documents will be opened in the internal PDF viewer instead of being downloaded.
Enabled by default.
This property was introduced in QtWebEngine 1.9.
代码:
from PyQt5 import QtWidgets,QtCore,QtGui
from PyQt5.QtCore import QUrl, QFile, QFileInfo
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
class pdfReaderQWebView(QWebEngineView):
def __init__(self, parent=None):
super(pdfReaderQWebView, self).__init__(parent)
self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
self.settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True)
def setFile(self, filename):
Url = QUrl.fromLocalFile(QFileInfo(filename).absoluteFilePath())
self.setUrl(QtCore.QUrl(Url))
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = pdfReaderQWebView()
gui.setFile("demo.pdf")
gui.show()
sys.exit(app.exec_())