我使用
PyQt5.QtWebEngineWidgets
显示 PDF,并尝试获取所选文本。
使用 hasSelection()
和 selectedText()
适用于 HTML 文件,但在 Web 视图显示 PDF 文件时会失败。知道如何复制所选文本(除了使用 CTRL+C)吗?
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QMenu
from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEngineView
class Browser(QWebEngineView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def get_selection(self):
if self.hasSelection():
print(self.selectedText())
else:
print('No text selected')
def contextMenuEvent(self, event):
self.menu = QMenu()
get_selection = self.menu.addAction('Copy')
get_selection.triggered.connect(self.get_selection)
self.menu.popup(event.globalPos())
class MainWindow(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
self.setWindowTitle("PDF Viewer")
self.setGeometry(0, 28, 1000, 750)
self.webView = QWebEngineView()
self.webView = Browser()
self.webView.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)
self.webView.settings().setAttribute(QWebEngineSettings.PdfViewerEnabled, True)
self.setCentralWidget(self.webView)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
win = MainWindow()
win.show()
win.webView.setUrl(QUrl.fromLocalFile("d:/test.pdf"))
sys.exit(app.exec_())
试试这个代码:
current_view = self.tab_widget.currentWidget()
current_page = current_view.page()
selected_text = current_page.selectedText()
print(selected_text)