C# WebBrowser调用Navigate加载PDF后黑屏 Any CPU模式下如何解决
问题根因
近期Adobe Acrobat/Reader 64位版本推送了更新,取消了对WebBrowser控件依赖的旧版IE Trident内核的PDF ActiveX插件兼容支持。Any CPU编译的程序在64位系统上会以64位进程运行,调用失效的64位PDF插件就会出现黑屏;x86模式下调用的32位Adobe插件暂未取消兼容,所以可以正常运行。
兼容现有代码的快速修复方案
- 打开项目生成属性,勾选首选32位选项,Any CPU编译的程序会在64位系统上默认以32位进程运行,无需修改业务代码即可恢复功能。
- 若不能启用首选32位,可修改注册表修复插件加载逻辑:定位到路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{CA8A9780-280D-11CF-A24D-444553540000},将Compatibility Flags的数值修改为0即可。
无第三方依赖的长期替代方案
以下方案不依赖系统安装的PDF阅读器,不会因为阅读器版本更新再次失效:
方案1:替换为WebView2控件
WebView2基于Chromium内核,自带PDF渲染能力,适配Any CPU编译,只需要先安装Microsoft.Web.WebView2 NuGet包,核心代码修改为:
PDF_name = openFileDialog1.FileName; await webView21.EnsureCoreWebView2Async(); webView21.CoreWebView2.Navigate(PDF_name);
方案2:使用PdfiumViewer原生PDF控件
PdfiumViewer是开源的PDF渲染控件,自带多架构原生渲染库,自动适配Any CPU编译,不需要调用浏览器控件,核心代码如下:
using (var pdfDoc = PdfDocument.Load(PDF_name)) { pdfViewer1.LoadDocument(pdfDoc); }
内容的提问来源于stack exchange,提问作者infCAT
相关产品推荐
相关产品推荐

