You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扩展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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:55:16