如何在不弹出页面设置对话框时,用TWebBrowser设置打印零边距?
解决TWebBrowser打印HTML边距无法设为0的问题
使用TWebBrowser打印HTML文档时,尝试通过WebHTML.Margins.SetBounds(0, 0, 0, 0)和CSS @page { margin: 0in; padding: 0in; }设置边距为0,但打印结果仍存在0.75英寸边距。原因是TWebBrowser默认调用IE页面设置对话框中的默认边距值(0.75英寸),需在不弹出对话框的情况下直接修改这些参数。
方法一:通过IHTMLPrint接口强制设置边距
通过WebBrowser的文档对象获取IHTMLPrint接口,直接指定打印边距(单位为百分之一英寸),该设置会覆盖IE的默认页面边距:
var WebHTML: TWebBrowser; Doc: IHTMLDocument2; PrintObj: IHTMLPrint; PrintMargin: tagRECT; begin // 确保文档已加载完成 if not Assigned(WebHTML.Document) or (WebHTML.ReadyState <> READYSTATE_COMPLETE) then Exit; // 获取IHTMLDocument2接口 if WebHTML.Document.QueryInterface(IHTMLDocument2, Doc) = S_OK then begin // 获取IHTMLPrint接口 if Doc.QueryInterface(IHTMLPrint, PrintObj) = S_OK then begin // 设置四边边距为0(单位:百分之一英寸) PrintMargin.left := 0; PrintMargin.top := 0; PrintMargin.right := 0; PrintMargin.bottom := 0; PrintObj.setMarginRect(PrintMargin); // 执行无提示打印 WebHTML.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER); end; end; end;
方法二:配合CSS禁用默认页眉页脚
IE默认的页眉(页面标题、URL)和页脚(页码)会占用额外空间,需在HTML中添加CSS隐藏它们:
@page { margin: 0in; padding: 0in; } /* 清除body边距 */ body { margin: 0; padding: 0; } /* 隐藏IE默认页眉页脚内容 */ @top-left { content: ""; } @top-right { content: ""; } @bottom-left { content: ""; } @bottom-right { content: ""; }
注意事项
- 必须在文档完全加载后执行边距设置和打印操作,可通过
WebHTML.ReadyState判断是否为READYSTATE_COMPLETE。 - 部分打印机存在硬件最小边距限制,若设置为0后仍有边距,需检查打印机自身的设置。
内容的提问来源于stack exchange,提问作者Kyle Williamson
相关产品推荐
相关产品推荐

