在 PyQt5 QWebEngineView 中从 PDF 复制所选文本

问题描述 投票:0回答:1

我使用

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_())
python pyqt5 qtwebengine
1个回答
0
投票

试试这个代码:

    current_view = self.tab_widget.currentWidget()
    current_page = current_view.page()
    selected_text = current_page.selectedText()
    print(selected_text)
© www.soinside.com 2019 - 2024. All rights reserved.