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

Delphi中TEdgeBrowser组件实现打印功能的方法咨询

Delphi TEdgeBrowser 打印功能实现方案

TEdgeBrowser 基于 Chromium Edge 内核,不兼容旧版 TWebBrowser(IE内核)的 OLE 命令调用方式,可通过以下两种方案实现打印需求:


方案1:调用ExecuteScript执行JS打印(实现简单,适合常规场景)

  • 如需静默无弹窗打印,需提前为WebView配置--kiosk-printing启动参数,配置后调用打印接口不会弹出打印设置对话框
  • 参考代码:
// 窗体创建时配置WebView启动参数
procedure TForm1.FormCreate(Sender: TObject);
var
  LAdditionalArgs: TStringList;
begin
  LAdditionalArgs := TStringList.Create;
  try
    // 添加静默打印参数,必须在WebView实例创建前传入
    LAdditionalArgs.Add('--kiosk-printing');
    EdgeBrowser1.CreateWebViewWithAdditionalArgs(nil, LAdditionalArgs);
  finally
    LAdditionalArgs.Free;
  end;
end;

// 触发打印
procedure TForm1.btnPrintClick(Sender: TObject);
begin
  // 未加--kiosk-printing参数时会弹出系统打印对话框
  // 加参数后直接发送打印任务到默认打印机
  EdgeBrowser1.ExecuteScript('window.print();');
end;

方案2:调用CDP协议PrintToPDF方法(适合需要自定义打印参数的场景)

通过调用Edge DevTools Protocol的打印接口,可以灵活控制纸张尺寸、页边距、是否打印背景、是否导出PDF等需求,返回的base64编码PDF流可直接保存或调用系统打印API输出。

  • 参考代码:
uses
  System.JSON, System.NetEncoding;

procedure TForm1.btnCustomPrintClick(Sender: TObject);
var
  LPrintParams: string;
begin
  // 构造打印参数,单位为英寸,以下为A4纸标准配置
  LPrintParams := '{'
    + '"landscape": false,'
    + '"printBackground": true,'
    + '"paperWidth": 8.27,'
    + '"paperHeight": 11.69,'
    + '"marginTop": 0.4,'
    + '"marginBottom": 0.4,'
    + '"marginLeft": 0.4,'
    + '"marginRight": 0.4'
    + '}';

  // 调用CDP打印接口
  EdgeBrowser1.ExecuteDevToolsProtocolMethod('Page.printToPDF', LPrintParams,
    procedure(const AResult: string; const AException: string)
    var
      LPDFData: TBytes;
      LStream: TBytesStream;
    begin
      if AException = '' then
      begin
        // 解析返回的PDF base64数据
        LPDFData := TNetEncoding.Base64.DecodeStringToBytes(
          TJSONObject.ParseJSONValue(AResult).GetValue<string>('data')
        );
        LStream := TBytesStream.Create(LPDFData);
        try
          // 可选择保存为PDF文件,或调用系统打印API直接输出该流到打印机
          LStream.SaveToFile('打印输出文件.pdf');
        finally
          LStream.Free;
        end;
      end;
    end);
end;

注意事项

  • Delphi 11及以上版本的TEdgeBrowser对CDP接口调用支持更完善,低版本建议先升级组件
  • --kiosk-printing参数仅支持WebView实例创建前配置,运行时修改无效
  • 如需指定非默认打印机,可先通过系统API切换默认打印机后再调用静默打印,或使用第三方PDF打印组件处理CDP返回的PDF流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:36:01