本人的开发环境为D5。
在搜索中找到以下几种实现的方法。
1.来自ZSWang的
http://expert.csdn.net/Expert/topic/2634/2634699.xml?temp=.6191217
它解决了将图片的路径修正为全路径,但仍未能将图片打包到mht文件中。
2.来自 oracle_lover(数据库情人)
http://expert.csdn.net/Expert/topic/2411/2411849.xml?temp=.5925714
代码如下:
var
tmpStrs: TStrings;
begin
tmpStrs:=TStringList.Create;
try
tmpStrs.LoadFromFile('C:/go.htm');
tmpStrs.SaveToFile('C:/go.mht');
finally
tmpStrs.Free;
end;
end;
根本就没有解决图片打包的问题。
3.在D6,D7利用WebBrowser控件进行转化
即webbrowser1.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER);
但是如果遇到人家网页里加上代码:
//禁止保存网页内容
<noscript>
<iframe src="*.htm">
</iframe>
</noscript>
则无法保存网页。
========================
请问谁能有更好的办法将htm另存为mht文件,将图片打包进mht文件,并没有WebBrower控件下。
VC的代码,将就看吧
回复人: masterz(MS MVP) ( ) 信誉:147 2002-6-7 17:42:45 得分:300
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF", "EndOfFile")
#import <cdosys.dll> no_namespace rename("EOF", "EndOfFile")
............
void CSavemhtDlg::OnOK()
{
// save url as a single file, in fact I don't know if it is mht file, but it can be opened by IE, can someone tell me?
CoInitialize(NULL);
{
IMessagePtr iMsg(__uuidof(Message));
IConfigurationPtr iConf(__uuidof(Configuration));
iMsg->Configuration = iConf;
try
{
iMsg->CreateMHTMLBody(
"http://example.microsoft.com",
cdoSuppressNone,
"domain//username",
"password");
}
catch(_com_error err)
{
// handle exception
}
_StreamPtr pStream=iMsg->GetStream();
pStream->SaveToFile("test.mht",adSaveCreateOverWrite);
}
CoUninitialize();
}
谢谢 jiangsheng(蒋晟.MSMVP2004Jan)
原来是将cdoSuppressAll改为cdoSuppressNone就OK了,偶就是笨,试过cdoSuppressImages,就没有试其他了,看来下次要多试 哈哈
vMessage.CreateMHTMLBody(mURL, cdoSuppressNone, '', '');
代码:
procedure SaveWholePage(mURL: string; mFileName: TFileName);
var
vMessage: IMessage;
vConfiguration: IConfiguration;
vStream: _Stream;
begin
vMessage := CreateComObject(CLASS_Message) as IMessage;
vConfiguration := CreateComObject(CLASS_Configuration) as IConfiguration;
try
vMessage.Configuration := vConfiguration;
vMessage.CreateMHTMLBody(mURL, cdoSuppressNone, '', ''); //此用将zswang的cdoSuppressAll改为cdoSuppressNone
vStream := vMessage.GetStream;
vStream.SaveToFile(mFileName, adSaveCreateOverWrite);
finally
vMessage := nil;
vConfiguration := nil;
vStream := nil;
end;
end;
在搜索中找到以下几种实现的方法。
1.来自ZSWang的
http://expert.csdn.net/Expert/topic/2634/2634699.xml?temp=.6191217
它解决了将图片的路径修正为全路径,但仍未能将图片打包到mht文件中。
2.来自 oracle_lover(数据库情人)
http://expert.csdn.net/Expert/topic/2411/2411849.xml?temp=.5925714
代码如下:
var
tmpStrs: TStrings;
begin
tmpStrs:=TStringList.Create;
try
tmpStrs.LoadFromFile('C:/go.htm');
tmpStrs.SaveToFile('C:/go.mht');
finally
tmpStrs.Free;
end;
end;
根本就没有解决图片打包的问题。
3.在D6,D7利用WebBrowser控件进行转化
即webbrowser1.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER);
但是如果遇到人家网页里加上代码:
//禁止保存网页内容
<noscript>
<iframe src="*.htm">
</iframe>
</noscript>
则无法保存网页。
========================
请问谁能有更好的办法将htm另存为mht文件,将图片打包进mht文件,并没有WebBrower控件下。
VC的代码,将就看吧
回复人: masterz(MS MVP) ( ) 信誉:147 2002-6-7 17:42:45 得分:300
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF", "EndOfFile")
#import <cdosys.dll> no_namespace rename("EOF", "EndOfFile")
............
void CSavemhtDlg::OnOK()
{
// save url as a single file, in fact I don't know if it is mht file, but it can be opened by IE, can someone tell me?
CoInitialize(NULL);
{
IMessagePtr iMsg(__uuidof(Message));
IConfigurationPtr iConf(__uuidof(Configuration));
iMsg->Configuration = iConf;
try
{
iMsg->CreateMHTMLBody(
"http://example.microsoft.com",
cdoSuppressNone,
"domain//username",
"password");
}
catch(_com_error err)
{
// handle exception
}
_StreamPtr pStream=iMsg->GetStream();
pStream->SaveToFile("test.mht",adSaveCreateOverWrite);
}
CoUninitialize();
}
谢谢 jiangsheng(蒋晟.MSMVP2004Jan)
原来是将cdoSuppressAll改为cdoSuppressNone就OK了,偶就是笨,试过cdoSuppressImages,就没有试其他了,看来下次要多试 哈哈
vMessage.CreateMHTMLBody(mURL, cdoSuppressNone, '', '');
代码:
procedure SaveWholePage(mURL: string; mFileName: TFileName);
var
vMessage: IMessage;
vConfiguration: IConfiguration;
vStream: _Stream;
begin
vMessage := CreateComObject(CLASS_Message) as IMessage;
vConfiguration := CreateComObject(CLASS_Configuration) as IConfiguration;
try
vMessage.Configuration := vConfiguration;
vMessage.CreateMHTMLBody(mURL, cdoSuppressNone, '', ''); //此用将zswang的cdoSuppressAll改为cdoSuppressNone
vStream := vMessage.GetStream;
vStream.SaveToFile(mFileName, adSaveCreateOverWrite);
finally
vMessage := nil;
vConfiguration := nil;
vStream := nil;
end;
end;