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时才会把那些
图片、音频等多媒体内容都打包进去。


posted @ 2024-07-19 16:59  txiuq  阅读(6)  评论(0编辑  收藏  举报