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. jsp导出excel

    很多时候,我们都知道在java项目里面采用poi来导出excel很方便,但是如果你的项目采用的是jsp你可以用更简单的方法来导出.首先你要在顶部引入:<jsp:directive.page im ...

  2. enable c++11 in autoconf in fucking gnu auto tools

    configure.ac => CXXFLAGS="$CXXFLAGS -std=c++14" set CXXFLAGS  => std=c++14 well done ...

  3. linux软件的安装,更新与卸载

    Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类. 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件: 第二:对应的有管理 ...

  4. hdu4003Find Metal Mineral(树形DP)

    4003 思维啊 dp[i][j]表示当前I节点停留了j个机器人 那么它与父亲的关系就有了 那条边就走了j遍 dp[i][j] = min(dp[i][j],dp[child][g]+dp[i][j- ...

  5. document.body.innerHTML用jquery如何表示

    $("body").html('XXXX');     //这个是赋值 $("body").html();    //这个是获取HTML的内容

  6. Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置.

    昨天部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,顶多就两行提示信息,例如:严重: Error listenerStart严重: Context [/lizongbo] ...

  7. JS 去除字符串中的空格

    1. 去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明: ...

  8. DataGridView导出Excel

    将DataGridView里面的数据,导出到表格里面去. 首先,需要添加三个引用 直接在解决方案里,右键添加引用,找到路径即可.然后再把这三个文件复制到项目的根目录下. 然后定义导出表格的函数: pu ...

  9. web工程中web.xml元素加载顺序以及配置实例

    简介 web.xml是web工程的配置文件,容器加载web工程时,会首先从WEB-INF中查询web.xml,并加载其中的配置信息,可以将web.xml认为是web工程的入口. web.xml中包含有 ...

  10. 了解Objective-C中NSAutoreleasePool使用方法

    本文的目的是来了解Objective-C中NSAutoreleasePool使用方法,Objective-C的Foundation库实际上是种运行级对象系统,与一般的对象语言,例如C++,Java不一 ...