如何扩展jumpToView函数,在PDF.js+PyQt5加载PDF后聚焦指定页面与矩形
扩展PDF.js跳转函数实现页面+矩形区域聚焦
你可以通过修改jumpToView函数,增加rect参数,并利用PDF.js的pageView对象提供的方法来实现同时跳转到指定页面并聚焦到目标矩形区域。以下是修改后的完整代码:
from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QUrl class MyWebWidgetPdf(QWebEngineView): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 缓存加载完成后自动跳转的目标 self._target_page = None self._target_rect = None self.loadFinished.connect(self._on_load_finished) def set_jump_target(self, page_number, rect=None): """设置PDF加载完成后自动跳转的目标页面和矩形区域""" self._target_page = page_number self._target_rect = rect def jumpToView(self, page_number, rect=None): """手动触发跳转到指定页面,并可选聚焦到目标矩形区域""" js_script_parts = [ "function jumpAndFocus() {", " const viewer = PDFViewerApplication.pdfViewer;", f" viewer.currentPageNumber = {page_number};", ] if rect: # PDF.js页面索引从0开始,需转成0基索引 page_index = page_number - 1 x, y, width, height = rect js_script_parts.extend([ f" const pageView = viewer.getPageView({page_index});", " if (pageView) {", " // fitRectangle让目标矩形适配当前视图窗口,自动调整缩放和滚动", f" pageView.fitRectangle({x}, {y}, {width}, {height});", " // 若仅需滚动到区域不缩放,可替换为:pageView.scrollIntoView({x}, {y}, {width}, {height});", " }", ]) js_script_parts.extend([ "}", "jumpAndFocus();" ]) self.page().runJavaScript("\n".join(js_script_parts)) def _on_load_finished(self, ok): """PDF加载完成后自动执行跳转""" if ok and self._target_page is not None: self.jumpToView(self._target_page, self._target_rect) # 重置目标避免重复触发 self._target_page = None self._target_rect = None
关键说明:
rect参数需传入元组格式(x, y, width, height),对应PDF页面内的坐标(注意PDF坐标系统默认以左下角为原点,若视图显示有偏移可调整y值)。fitRectangle方法会自动调整视图缩放比例和滚动位置,让目标矩形区域完整适配当前窗口;若仅需滚动到目标区域而保持当前缩放比例,可替换为scrollIntoView方法。- 通过
set_jump_target配合loadFinished信号,可实现PDF加载完成后自动跳转聚焦,无需手动触发。
使用示例:
# 初始化PDF视图 pdf_view = MyWebWidgetPdf() # 设置加载完成后跳转到第5页,聚焦到(150, 250, 400, 300)的矩形区域 pdf_view.set_jump_target(5, (150, 250, 400, 300)) # 加载本地PDF文件 pdf_view.load(QUrl.fromLocalFile("path/to/your/pdf/file.pdf"))
内容的提问来源于stack exchange,提问作者Mazze
相关产品推荐
相关产品推荐

