using System;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;


namespace HTMLConversion
{
    /// <summary>
    /// HtmlConvertToMht 类
    /// </summary>
    #region HtmlConvertToMht 类的实现
    public class HtmlConvertToMhtByCdo : IHtmlConvertToMht
    {
        public HtmlConvertToMhtByCdo()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        
        #region 变量
        
        string _CharSet="gb2312";
        
        #endregion
        
        #region 属性
        public string CharSet
        {
            get
            {
                return _CharSet;
            }
            set
            {
                _CharSet = value;
            }
        }
        #endregion
        
        #region 方法
        /// <summary>
        /// 把Html格式二进制流转换成Mht格式的二进制流
        /// </summary>
        /// <param name="htmlUrl">Html格式的二进制流</param>
        /// <returns>Mht格式的二进制流</returns>
        public byte[] ConvertHtmlUrlToMht(string htmlUrl)
        {
            string strMhtContent = string.Empty;
            byte[] BytMhtContent = null;
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.CreateMHTMLBody(htmlUrl,CDO.CdoMHTMLFlags.cdoSuppressNone,"",""); 
            stream = message.GetStream();
            stream.Charset = _CharSet;
            strMhtContent= stream.ReadText(stream.Size);
            BytMhtContent = Encoding.GetEncoding(_CharSet).GetBytes(strMhtContent);
            return BytMhtContent;
        }
        
        /// <summary>
        /// 把Html格式二进制流转换成Mht格式的二进制流,成功返回true,失败返回false
        /// </summary>
        /// <param name="htmlUrl">Html格式的二进制流</param>
        /// <param name="filePath">Mht文件的保存路径</param>
        /// <returns>操作结果 成功:true,失败;false</returns>
        public bool ConvertHtmlUrlToMht(string htmlUrl,string filePath)
        {
            bool isConvertHtmlBytesToMht = false;
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.CreateMHTMLBody(htmlUrl,CDO.CdoMHTMLFlags.cdoSuppressNone,"",""); 
            stream = message.GetStream();
            stream.SaveToFile(filePath,ADODB.SaveOptionsEnum.adSaveCreateOverWrite);
            message=null;
            stream.Close();
            isConvertHtmlBytesToMht=true;
            return isConvertHtmlBytesToMht;
        }
        /// <summary>
        /// 把Html格式二进制流转换成Mht格式的二进制流
        /// </summary>
        /// <param name="htmlContent">Html格式的二进制流</param>
        /// <returns>Mht格式的二进制流</returns>
        public byte[] ConvertHtmlBytesToMht(byte[] htmlContent)
        {
            string strMhtContent = string.Empty;
            string strHtmlContent =  Encoding.Default.GetString(htmlContent);
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.HTMLBody = strHtmlContent;
            stream = message.GetStream();
            stream.Charset = _CharSet;
            strMhtContent= stream.ReadText(stream.Size);
            byte[] BytMhtContent = Encoding.GetEncoding(_CharSet).GetBytes(strMhtContent);
            return BytMhtContent;
        }
        
        /// <summary>
        /// 根据输入的Html文本内容(二进制)返回Mht文本内容(二进制流),成功返回true,失败返回false
        /// </summary>
        /// <param name="htmlContent">Html格式的二进制流</param>
        /// <param name="filePath">Mht文件的保存路径</param>
        /// <returns>操作结果 成功:true,失败;false</returns>
        public bool ConvertHtmlBytesToMht(byte[] htmlContent,string filePath)
        {
            bool isConvertHtmlBytesToMht = false;
            string strHtmlContent =  Encoding.GetEncoding(_CharSet).GetString(htmlContent);
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.HTMLBody = strHtmlContent;
            stream = message.GetStream();
            stream.Charset = _CharSet;
            string strMhtContent= stream.ReadText(stream.Size);
            byte[] BytMhtContent = Encoding.GetEncoding(_CharSet).GetBytes(strMhtContent);
            FileStream fileStream = new FileStream(filePath,FileMode.Create,FileAccess.Write);
            fileStream.Write(BytMhtContent,0,BytMhtContent.Length);
            message=null;
            stream.Close();
            isConvertHtmlBytesToMht=true;
            return isConvertHtmlBytesToMht;
        }
        
        /// <summary>
        /// 根据输入的Html文本内容(字符串)返回Mht文本内容(二进制流)
        /// </summary>
        /// <param name="htmlContent">Html文本内容(字符串)</param>
        /// <returns>Mht格式的二进制流</returns>
        public byte[] ConvertHtmlTextToMht(string htmlContent)
        {
            string strMhtContent = String.Empty;
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.HTMLBody = htmlContent;
            stream = message.GetStream();
            stream.Charset = _CharSet;
            strMhtContent= stream.ReadText(stream.Size);
            byte[] bytMhtContent = Encoding.GetEncoding(_CharSet).GetBytes(strMhtContent);
            return bytMhtContent;
        }
        
    /// <summary>
        /// 根据输入的Html文本内容(字符串)返回Mht文本内容(二进制流),成功返回true,失败返回false
        /// </summary>
        /// <param name="htmlContent">Html文本内容(字符串)</param>
        /// <param name="filePath">Mht文件的保存路径</param>
        /// <returns>操作结果:成功:true,失败:false</returns>
        public bool ConvertHtmlTextToMht(string htmlContent,string filePath)
        {
            bool isConvertHtmlBytesToMht = false;
            CDO.Message  message = new CDO.MessageClass();
            ADODB.Stream  stream=null;
            message.MimeFormatted =true;
            message.HTMLBody = htmlContent;
            stream = message.GetStream();
            stream.Charset = _CharSet;
            string strMhtContent= stream.ReadText(stream.Size);
            byte[] BytMhtContent = Encoding.GetEncoding(_CharSet).GetBytes(strMhtContent);
            FileStream fileStream = new FileStream(filePath,FileMode.Create,FileAccess.Write);
            fileStream.Write(BytMhtContent,0,BytMhtContent.Length);
            message=null;
            stream.Close();
            isConvertHtmlBytesToMht=true;
            return isConvertHtmlBytesToMht;
        }
        #endregion
        
    } // class HtmlConvertToMhtByCdo
    #endregion
    
} // HTMLConversion

C# html互转mht的更多相关文章

  1. [No00009A]JsonToObject json与类互转

    using System.Web.Script.Serialization; /// <summary> /// 内部类,保存jsonData /// </summary> p ...

  2. JavaScript 汉字与拼音互转终极方案 附JS拼音输入法

    转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...

  3. vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!

    现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...

  4. 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法

    前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼音首字母却要引入200kb的字 ...

  5. 王宝强新片P2P风波持续发酵,互金真的前途未卜?

    王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...

  6. json、javaBean、xml互转的几种工具介绍

    json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...

  7. SQL2008使用json.net实现XML与JSON互转

    借助CLR,首先实现字符串的互转,然后使用存储过程实现JSON2table     public class JsonFunction    {        /// <summary> ...

  8. 使用scp在windows和Linux之间互传文件

    转自:http://yangzhongfei.blog.163.com/blog/static/4610987520103141050918/ 为了进行系统维护操作,有时需要再windows和linu ...

  9. F2工作流引擎参与者类型成员的交、并、互拆计算规则

          计算描述:计算规则指的是和其它“参与者类型成员”的之间的计算,必须求解处理人不为空的情况下才进行规则计算,各个“参与者类型成员”按序号顺序执行. 计算算法:并集(权重最低),交集(权重中) ...

随机推荐

  1. flex 生命周期 ibm引用

    Flex 本质 提起 Flex 我们不得不追述其发展历史以及两个很重要的名词或者说技术,那就是 Flash 和 Flash Player.Flash 是 Adobe 推出的基于时间轴的交互式矢量图和 ...

  2. 批处理 —— 每天生成一个以日期命名的文件(Win XP)

    想达到这样一个效果:每天在某个目录下生成一个以日期命名的文件(如,0705.txt). 第一步,新建一个批处理文件 新建一个文件,比如[create_day_file.bat].编辑,输入以下内容 : ...

  3. Python 时间戳与时间字符串互相转

    #设a为字符串 import time a = "2011-09-28 10:00:00" #中间过程,一般都需要将字符串转化为时间数组 time.strptime(a,'%Y-% ...

  4. 加密解密(7)*PKI基础知识(完整)

    PKI 基础知识 摘要 本白皮书介绍了加密和公钥基本结构(PKI)的概念和使用 Microsoft Windows 2000 Server 操作系统中的证书服务的基础知识.如果您还不熟悉加密和公钥技术 ...

  5. Linux多线程(二)(线程等待,退出)

    1. 线程的等待退出 1.1. 等待线程退出 线程从入口点函数自然返回,或者主动调用pthread_exit()函数,都可以让线程正常终止 线程从入口点函数自然返回时,函数返回值可以被其它线程用pth ...

  6. UVa (BFS) The Monocycle

    题目不光要求要到达终点而且要求所走的步数为5的倍数,每个时刻有三个选择,前进,左转弯,右转弯. 所以在vis数组中新增加两个维度即可,vis[x][y][dir][color]表示在(x, y)格子方 ...

  7. HDU 4006 The kth great number【优先队列】

    题意:输入n行,k,如果一行以I开头,那么插入x,如果以Q开头,则输出第k大的数 用优先队列来做,将队列的大小维护在k这么大,然后每次取队首元素就可以了 另外这个维护队列只有k个元素的时候需要注意一下 ...

  8. 一招解决OpenERP8.0安装旧版模块报错

    有喜欢尝鲜的网友开始玩8.0了,可是版本还没发布,社区的很多特别好的模块还没有升级到8,所以经常碰到模块无法安装的问题. No module name osv 网友提出将模块的 from osv im ...

  9. matlab注释使用,以及相应的注释快捷键

    1.多行注释 单行注释是加% %{ 若干语句 %} 2.快捷键 多行注释: 选中要注释的若干语句, 编辑器菜单Text-<Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释的语 ...

  10. Node.js的循环依赖

    我们知道在实际编程过程中,要尽可能的减少或者规避循环依赖情况的发生.但在现实环境中,有时却不得不产生循环依赖.Node.js不提倡使用循环依赖,但真有如此情况发生时Node.js也有办法解决.这篇博文 ...