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. vim快捷键笔记【原创】

    Vim zR  全部展开 zM全部合并 vim  快捷键 shift   +  i      (‘I’)    进行编辑 shift   +  4     (‘$’)    跳到行尾 shift   ...

  2. Windows,OS X 屏幕录制gif的工具

    gif比png,jpg具有更好的展示效果.github上的很多项目就用gif. 一个比较好的工具是 : http://cockos.com/licecap/    但是目前不支持linux.

  3. Android:将View的内容映射成Bitmap转图片导出

    前段时间在网上看到这么个例子是将view映射到一个bitmap中,稍加改进可以用于一些截图工具或者截图软件(QQ截图之类),例子写的不够完善,不过很有些学习的意义内容大致如下: 在Android中自有 ...

  4. KEYUSE

    typedef struct keyuse_t { TABLE *table; Item *val; /**< or value if no field */ table_map used_ta ...

  5. Machine Learning for hackers读书笔记(五)回归模型:预测网页访问量

    线性回归函数 model<-lm(Weight~Height,data=?) coef(model):得到回归直线的截距 predict(model):预测 residuals(model):残 ...

  6. 【转】很有用但鲜有人知的 Linux 命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有 ...

  7. 想找个计算器当本命?来试试UWP应用《纸书科学计算器》

    久违了.上次在博客园发文还是4年前,正是高中参加NOIP的时候.这4年里发生了很多事,乃至再次看到过去的文章时,仿佛看到了自己也不熟悉的风景.最近很想把我的博客重新拾起来,慢慢灌溉,写一些微不足道的技 ...

  8. XmlElement可以避免由XmlSerializer多余生成的代码

    public class Program { static void Main(string[] args) { var alarm = new Alarm() { Code = "1588 ...

  9. 最冤枉的关键字----sizeof

    <h4>一.常年被人误认为函数.</h4> sizeof 是关键字不是函数,其实就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份.看下面的例子: int ...

  10. Android Retrofit实现原理分析

    retrofit有几个关键的地方. 1.用户自定义的接口和接口方法.(由动态代理创建对象.) 2.converter转换器.(把response转换为一个具体的对象) 3.注解的使用. 让我们跟随Ap ...