CefSharp ChromiumWebBrowser打印对话框不显示文本问题
CefSharp ChromiumWebBrowser打印对话框无文本问题解决
问题现象
WinForm项目中CefSharp的打印对话框无法显示原有文本:
正常的打印对话框应显示完整文本:
初始化代码如下:
_Browser = new ChromiumWebBrowser(string.Empty); _Browser.ActivateBrowserOnCreation = true; _Browser.Dock = System.Windows.Forms.DockStyle.Fill; _Browser.Name = "_Browser"; _Browser.TabIndex = 1; _Browser.ContextMenuStrip = ContextMenuStrip ?? DefaultContextMenuStrip; _Browser.ContextMenuStrip.AutoClose = true; _Browser.DownloadHandler = new SimpleDownloadHandler(this); _Browser.LifeSpanHandler = new SimpleLifeSpanHandler(this); _Browser.MenuHandler = new ContextMenuStripHandler(_Browser.ContextMenuStrip); _Browser.AddressChanged += new SystemEventHandler<CefSharp.AddressChangedEventArgs>(Browser_AddressChanged); _Browser.FrameLoadStart += new SystemEventHandler<CefSharp.FrameLoadStartEventArgs>(Browser_FrameLoadStart); _Browser.FrameLoadEnd += new SystemEventHandler<CefSharp.FrameLoadEndEventArgs>(Browser_FrameLoadEnd); _Browser.LoadingStateChanged += new SystemEventHandler<CefSharp.LoadingStateChangedEventArgs>(Browser_LoadingStateChanged); _Browser.ConsoleMessage += new SystemEventHandler<CefSharp.ConsoleMessageEventArgs>(Browser_ConsoleMessage); _Browser.StatusMessage += new SystemEventHandler<CefSharp.StatusMessageEventArgs>(Browser_StatusMessage); _Browser.IsBrowserInitializedChanged += new SystemEventHandler(Browser_IsBrowserInitializedChanged); _Browser.TitleChanged += Browser_TitleChanged; try { Parent.ContextMenuStrip = _Browser.ContextMenuStrip; } catch { } try { var bs = _Browser.BrowserSettings?? new CefSharp.BrowserSettings(!System.Diagnostics.Debugger.IsAttached); bs.Javascript = CefState.Enabled; bs.JavascriptAccessClipboard = CefState.Enabled; bs.JavascriptDomPaste = CefState.Enabled; bs.JavascriptCloseWindows = CefState.Enabled; bs.WebGl = CefState.Enabled; bs.Plugins = CefState.Enabled; bs.BackgroundColor = (uint)Color.FromArgb(255, BackColor).ToArgb(); _Browser.BrowserSettings = bs; } catch { } this.Controls.Add(_Browser); _Browser.BringToFront();
debug.log关键错误日志:
[1125/121409.766:WARNING:resource_bundle.cc(406)] locale_file_path.empty() for locale [1125/121409.785:ERROR:alloy_main_delegate.cc(534)] Could not load locale pak for en-US [1125/121415.403:WARNING:resource_bundle.cc(1059)] locale resources are not loaded ... [1125/121500.833:ERROR:alloy_content_client.cc(117)] No localized string available for id 6738
问题根源
日志中反复出现的Could not load locale pak for en-US和locale resources are not loaded错误,说明Chromium的本地化资源包未正确加载。打印对话框的文本属于这些本地化资源,缺失后自然无法显示。
解决方法
1. 确认本地化资源包存在
- 检查项目输出目录(如
bin/Debug/x64)是否有locales文件夹,里面包含对应语言的pak文件(比如cef_en-US.pak、cef_zh-CN.pak)。 - 若文件夹或文件缺失,重新安装CefSharp相关NuGet包,或手动从CefSharp发布包中提取
locales文件夹到输出目录。
2. 初始化Cef时指定语言与资源路径
在创建ChromiumWebBrowser实例前,先初始化Cef并配置资源路径,确保加载本地化资源。修改程序启动代码(比如Form构造函数或Program.cs的Main方法):
var cefSettings = new CefSettings(); // 设置语言,根据需求选zh-CN或en-US cefSettings.Locale = "zh-CN"; // 资源路径指向程序运行目录,确保能找到locales文件夹 cefSettings.ResourceDirPath = AppDomain.CurrentDomain.BaseDirectory; // 禁用GPU加速,顺带解决日志里的EGL错误 cefSettings.CefCommandLineArgs.Add("disable-gpu", "1"); cefSettings.CefCommandLineArgs.Add("disable-gpu-compositing", "1"); // 初始化Cef,注意此方法只能调用一次 if (!Cef.IsInitialized) { Cef.Initialize(cefSettings); }
3. 确保资源文件复制到输出目录
- 若手动添加了
locales文件夹,右键文件夹→属性→复制到输出目录,选择始终复制。 - 检查NuGet包的安装状态,确保CefSharp.WinForms、CefSharp.Common版本一致,无损坏。
验证
完成上述操作后重启项目,打开打印对话框即可看到正常显示的文本,同时查看debug.log,确认不再出现本地化资源加载失败的错误。
内容的提问来源于stack exchange,提问作者MiMFa
相关产品推荐
相关产品推荐

