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
相关产品推荐
相关产品推荐

