如何通过ICoreWebView2_16的Print()函数实现多份HTML文档打印?
问题与解决方案
问题概述
使用ICoreWebView2_16的Print()函数打印多份HTML文档时遇到两个核心问题:
- 同步循环调用
Print()无效,因为WebView2限制同一时间仅能执行一个打印操作 ICoreWebView2PrintSettings接口无打印份数设置项,ICoreWebView2PrintSettings2虽有该属性,但无法直接传入ICoreWebView2_16.Print()方法
解决方法1:通过ICoreWebView2PrintSettings2设置打印份数
由于ICoreWebView2PrintSettings2继承自ICoreWebView2PrintSettings,可先创建ICoreWebView2PrintSettings2实例并设置份数,再强制转换为父接口传入Print()。示例Delphi代码:
var PrintSettings2: ICoreWebView2PrintSettings2; begin // 创建PrintSettings2实例 (EdgeBrowser.DefaultInterface as ICoreWebView2_16).CreatePrintSettings(PrintSettings2); // 设置目标打印份数 PrintSettings2.Copies := NumberOfCopies; // 强制转换为父接口后传入Print() (EdgeBrowser.DefaultInterface as ICoreWebView2_16).Print(PrintSettings2 as ICoreWebView2PrintSettings, CoreWebView2PrintCompletedHandler); end;
解决方法2:串行化打印操作(适用于每份内容不同的场景)
若必须分多次打印不同内容,需在打印完成回调函数中发起下一次打印,避免同步调用冲突。示例Delphi代码:
var CurrentCopy: Integer; NumberOfCopies: Integer; PrintSettings: ICoreWebView2PrintSettings; procedure CoreWebView2PrintCompletedHandler(sender: ICoreWebView2; args: ICoreWebView2PrintCompletedEventArgs); begin if args.IsSuccessful then begin Inc(CurrentCopy); if CurrentCopy <= NumberOfCopies then begin // 回调内发起下一次打印 (EdgeBrowser.DefaultInterface as ICoreWebView2_16).Print(PrintSettings, CoreWebView2PrintCompletedHandler); end; end; end; // 启动打印流程 begin NumberOfCopies := 3; // 示例打印份数 CurrentCopy := 1; // 创建打印设置实例 (EdgeBrowser.DefaultInterface as ICoreWebView2_16).CreatePrintSettings(PrintSettings); // 触发第一次打印 (EdgeBrowser.DefaultInterface as ICoreWebView2_16).Print(PrintSettings, CoreWebView2PrintCompletedHandler); end;
优先使用方法1,通过设置份数可减少打印操作开销;若当前WebView2版本不支持
ICoreWebView2PrintSettings2,需升级至1.0.2045.28或更高版本。
内容的提问来源于stack exchange,提问作者Kyle Williamson
相关产品推荐
相关产品推荐

