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. MySQL:创建、修改和删除表

    其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语 ...

  2. This project needs to migrate WTP metadata

    in command-line: path> mvn eclipse:clean path> mvn -Dwtpversion=1.5 eclipse:eclipse path> m ...

  3. [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现

    第15讲 ionic用户个人中心登录注册的实现 这一讲包括登陆.注册.个人中心.个人资料页面的实现. 在一讲的改动有四个地方: 在config.js里配置接口地址 完善个人中心的服务层(service ...

  4. HDU (线段树 单点更新) I Hate It

    和上一道题没什么变化,只不过把单点增减变成了单点替换,把区间求和变成了区间求最大值. #include <cstdio> #include <algorithm> using ...

  5. BOM浏览器对象

    BOM 浏览器对象 一.浏览器本身就自己有一些对象,不用创建就可以使用 window(当前浏览器窗体) 属性: status opener closed parent top 方法: alert(); ...

  6. VS启用IIS调试的方法及可能碰到的问题。

    经常有这种情况, 开发机本地正常, 但是一旦发布到服务上后, 就出现各种问题. 这是由于开发机和服务器环境不一样造成的, 所以开发时要尽可能的模拟真实性.  这时候, VS的这个功能就帮大忙了. 如何 ...

  7. C# 编写Windows Service(windows服务程序)【转载】

    [转]http://www.cnblogs.com/bluestorm/p/3510398.html Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成 ...

  8. SqlDataAdapter的update方法

    公司项目需要,需要将旧数据升级.所谓的旧数据指密码,密码经过了加密处理,但是可逆的.现将加密算法进行了更新,因此需要同步处理系统中已有的旧数据. 所有的数据存储在一个表中,简单的说是数据批量更新.自动 ...

  9. Java反射基本玩法

    三个主要的反射类 Class反射对象描述类语义结构,可以从Class对象中获取构造函数.成员变量.方法类等元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作.这些反射对象类在java. ...

  10. 【转】使用Python的IDE:Eclipse+PyDev

    原文网址:http://www.crifan.com/try_with_python_ide_eclipse_pydev/ 之前已经介绍过了一些基本知识: [整理][多图详解]如何在Windows下开 ...