蛙蛙推荐:把网页的一部分保存成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

posted @ 2007-03-24 10:29  蛙蛙王子  Views(12103)  Comments(26Edit  收藏  举报