【代碼片段】把Html格式二進制流轉換成Mht格式的二進制流

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace QuickEAS.CoreLib
{
    public class LibHtmlConvertToMhtByCDO
    {
        #region 變量

        string _CharSet = "utf-8";

        #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 result = false;
            try
            {
                CDO.Message msg = new CDO.MessageClass();
                msg.MimeFormatted = true;
                CDO.Configuration cfg = new CDO.ConfigurationClass();
                msg.Configuration = cfg;
                msg.CreateMHTMLBody(htmlUrl, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");
                msg.GetStream().SaveToFile(filePath, ADODB.SaveOptionsEnum.adSaveCreateOverWrite);
                result = true;
            }
            catch (System.Exception ex)
            {
            }
            return result;
            //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 string ConvertHtmlTextToMhtString(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);
            return strMhtContent;
        }
        /// <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 
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章