Web网页保存为MHT单一文件
利用系统自带的接口来实现。 在Delphi里选择 Import Type Library 这一项,再选择C:\Windows\system32\cdosys.dll这个DLL,createunit可以得到这两个文件、 CDO_TLB, ADODB_TLB
use CDO_TLB, ADODB_TLB;// procedure TForm1.WB_SaveAs_MHT(WB: TWebBrowser; FileName: TFileName); var Msg: IMessage; Conf: IConfiguration; Stream: _Stream; URL : widestring; s1,s2: WideString; begin if not Assigned(WB.Document) then Exit; URL := WB.LocationURL; Msg := CoMessage.Create; Conf := CoConfiguration.Create; try Msg.Configuration := Conf; s1 := ''; s2 := ''; Msg.CreateMHTMLBody(URL, cdoSuppressAll, s1, s2); Stream := Msg.GetStream; Stream.SaveToFile(FileName, adSaveCreateOverWrite); finally Msg := nil; Conf := nil; Stream := nil; end; end;
导出为MHT的方法为: function URLPageSaveAsMHT(AURL: string; AFileName: string): Boolean; var Msg: IMessage; Conf: IConfiguration; Stream: _Stream; begin Result := False; try Msg := CoMessage.Create; Conf := CoConfiguration.Create; try Msg.Configuration := Conf; Msg.MimeFormatted := True; Msg.CreateMHTMLBody(widestring(AURL), cdoSuppressNone, '', ''); Stream := Msg.GetStream; Stream.SaveToFile(AFileName, adSaveCreateOverWrite); Result := True; finally Msg := nil; Conf := nil; Stream := nil; end; except // end; end;
需要注意的是CdoMHTMLFlags这个参数的取值,如果用 cdoSuppressNone 将所有资源下载打包进文件。
网上不少例子传的值是cdoSuppressAll,这样的话网页里所有的图片、音频等多媒体内容都不会打包进去,
浏览时如果原网站把那张图片删掉了,那么你就看不到图片了,只有传递cdoSuppressNone时才会把那些
图片、音频等多媒体内容都打包进去。
分类:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?