蛙蛙推荐:把网页的一部分保存成mht文件
【问题】
我们经常上网查资料,找到需要的页面的话一般需要保存下来以备以后查看。如果直接用浏览器的另存为功能保存成mht文件的话,网页的导航、广告也保存下来了,比较郁闷,而且有些页面另存为根本就存不下来。如果我们复制主要内容到写字板或者mybase保存成rtf的话,文章里的图片保存不下来。如果复制到word里保存成doc文件,以后机器没装word就不能看了。所以我们想把网页上我们需要的部分保存成单一的文件。
【思路】
1、.net默认没有把html文件保存成mht文件的功能,可cdo对象有。
2、把html的容器元素的contentEditable属性设置成true,该容器内的内容就可以编辑了。
3、.net 2.0新带的WebBrowser控件可以和控件里的页面进行Dhtml通信。
综合这3点,我们就可以把网页上的一部分保存成单一的mht文件
蛙蛙推荐:把网页的一部分保存成mht文件
【问题】
我们经常上网查资料,找到需要的页面的话一般需要保存下来以备以后查看。如果直接用浏览器的另存为功能保存成mht文件的话,网页的导航、广告也保存下来了,比较郁闷,而且有些页面另存为根本就存不下来。如果我们复制主要内容到写字板或者mybase保存成rtf的话,文章里的图片保存不下来。如果复制到word里保存成doc文件,以后机器没装word就不能看了。所以我们想把网页上我们需要的部分保存成单一的文件。
【思路】
1、.net默认没有把html文件保存成mht文件的功能,可cdo对象有。
2、把html的容器元素的contentEditable属性设置成true,该容器内的内容就可以编辑了。
3、.net 2.0新带的WebBrowser控件可以和控件里的页面进行Dhtml通信。
综合这3点,我们就可以把网页上的一部分保存成单一的mht文件
源码:https://files.cnblogs.com/onlytiancai/WawaSoft.KM.MhtMaker.rar
【正文】
MhtMaker
public class MhtMaker


{
private static readonly string tempFile = System.Configuration.ConfigurationManager.AppSettings["TempHtmlFile"];
public static readonly string mhtDir = System.Configuration.ConfigurationManager.AppSettings["MhtDir"];

static object lockObj = new object();

/**//// <summary>
/// 把html文本保存成mht文件,返回0表示成功,-1表示失败,-2表示有重名的文件
/// </summary>
/// <param name="file">要保存的mht文件名</param>
/// <param name="strHtml">要保存的html文本</param>
/// <returns></returns>
public static int SaveMht(string file, string strHtml)


{
lock (lockObj)

{
try

{
string mhtFile = System.Environment.CurrentDirectory + "\\" + mhtDir + "\\" + file + ".mht";
if (File.Exists(mhtFile))
return -2;

CDO.MessageClass msg = new CDO.MessageClass();
ADODB.Stream stm = null;

try

{
using (StreamWriter sr = new StreamWriter(tempFile, false, Encoding.UTF8))

{
sr.Write(strHtml);
sr.Flush();
}

msg.MimeFormatted = true;
msg.CreateMHTMLBody(System.Environment.CurrentDirectory + "\\" + tempFile, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");
stm = msg.GetStream();
stm.SaveToFile(mhtFile, ADODB.SaveOptionsEnum.adSaveCreateOverWrite);
}
finally

{
stm.Close();
}

return 0;
}
catch (Exception ex)

{
Log(ex);
return -1;
}
}
}


调用
public partial class Form1 : Form


{
public Form1()


{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
//获取你在webBrowser写入或者粘贴的html文本
string strHtml = webBrowser1.Document.Body.InnerHtml;
int reNo = MhtMaker.SaveMht(txtTitle.Text, strHtml);
if (reNo == 0)

{
System.Diagnostics.Process.Start(System.Environment.CurrentDirectory + "\\" + MhtMaker.mhtDir + "\\" + txtTitle.Text + ".mht");
}
else if (reNo == -1)
MessageBox.Show("保存出错,请查看日志");
else if (reNo == -2)
MessageBox.Show("有重名的文件");
}



private void Form1_Load(object sender, EventArgs e)


{
//设置webBrowser的htmlBody为可编辑状态
webBrowser1.DocumentText = "<HTML><BODY contentEditable='true'></BODY></HTML>";
}

【扩展】
我想把这个工具做成一个个人知识管理工具,大约有以下功能。
1、收获:把每天遇到的问题记录下来,从各种途径得到解决方案后记录下来。
2、备忘:公司的vpn地址,域帐户等备注信息可以保存下来。
3、便签:临时记录一个电话号码或一个网址。
4、待办事项:记录今天的工作计划,以及自己的个人计划,可以做到电脑提醒或者短信提醒。
5、集成google、msn、百度(知道)的搜索,进行聚类,并索引搜索历史记录,以备以后搜索或者DM用
6、网上保存下来的东西可以进行本地快速搜索,而且可以进行P2P共享
7、可以加入IM功能
8、RSS订阅
【扩展所用技术】
1、sqllite保存备忘便签,支持节点加密
2、用CDO技术把搜索到网页保存成mht文件
3、用lucene对mht文件进行实时增量索引及查询
4、用开源的bt库或者电驴库进行p2p共享
5、用开源的jabber库实现IM聊天
【改进】
1、初始HTM加上一下加粗,格式化等按钮,像FreeTextBox的功能
2、收藏的网页可加注释
【小节】
有意向参加此项目的哥们联系我哦,onlytiancai@msn.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构