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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:25:18