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

如何在C# WinForm .NET 6项目的WebView2中获取PDF当前页码?

获取WebView2中PDF当前页码的解决办法

核心思路是通过WebView2注入JavaScript脚本,调用Chrome内置PDF阅读器的window.PDFViewerApplication对象来获取和监听页码:

  • 单次获取当前页码
    在WebView2完成初始化后,执行以下C#代码:

    private async void GetCurrentPdfPage()
    {
        if (webView21.CoreWebView2 == null) return;
    
        string getPageScript = @"
            typeof window.PDFViewerApplication !== 'undefined' 
                ? window.PDFViewerApplication.page 
                : -1;
        ";
        string result = await webView21.CoreWebView2.ExecuteScriptAsync(getPageScript);
        if (int.TryParse(result.Trim('"'), out int currentPage) && currentPage != -1)
        {
            // 这里处理获取到的页码,比如更新UI
            // 注意跨线程更新UI需要Invoke
            labelPageNumber.Invoke(() => labelPageNumber.Text = $"当前页码:{currentPage}");
        }
    }
    
  • 实时监听页码变化
    如果需要实时获取页码更新,可在WebView2初始化完成后注入监听脚本,并通过WebMessageReceived事件接收页码:

    private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
    {
        if (!e.IsSuccess) return;
    
        // 注入监听页码变更的脚本
        string listenScript = @"
            if (typeof window.PDFViewerApplication !== 'undefined') {
                window.PDFViewerApplication.eventBus.on('pagechange', () => {
                    window.chrome.webview.postMessage(window.PDFViewerApplication.page);
                });
            }
        ";
        _ = webView21.CoreWebView2.ExecuteScriptAsync(listenScript);
    
        // 注册消息接收事件
        webView21.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived;
    }
    
    private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e)
    {
        if (int.TryParse(e.WebMessageAsJson.Trim('"'), out int currentPage))
        {
            labelPageNumber.Invoke(() => labelPageNumber.Text = $"当前页码:{currentPage}");
        }
    }
    

注意事项

  • 该方案依赖Chrome内置的PDF阅读器,若WebView2使用第三方PDF渲染组件,此方法不适用
  • 执行脚本前需确保当前加载的是PDF文件,可通过判断URL后缀或检查页面是否存在PDFViewerApplication对象验证
  • 异步操作更新UI时必须使用Invoke切换到UI线程,避免跨线程异常

内容的提问来源于stack exchange,提问作者Louis Fequet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:45:30