C# html互转mht
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的更多相关文章
- [No00009A]JsonToObject json与类互转
using System.Web.Script.Serialization; /// <summary> /// 内部类,保存jsonData /// </summary> p ...
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...
- vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!
现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...
- 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法
前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼音首字母却要引入200kb的字 ...
- 王宝强新片P2P风波持续发酵,互金真的前途未卜?
王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
- SQL2008使用json.net实现XML与JSON互转
借助CLR,首先实现字符串的互转,然后使用存储过程实现JSON2table public class JsonFunction { /// <summary> ...
- 使用scp在windows和Linux之间互传文件
转自:http://yangzhongfei.blog.163.com/blog/static/4610987520103141050918/ 为了进行系统维护操作,有时需要再windows和linu ...
- F2工作流引擎参与者类型成员的交、并、互拆计算规则
计算描述:计算规则指的是和其它“参与者类型成员”的之间的计算,必须求解处理人不为空的情况下才进行规则计算,各个“参与者类型成员”按序号顺序执行. 计算算法:并集(权重最低),交集(权重中) ...
随机推荐
- python中的列表(list) 切片详解
1.切片: 通过指定下标的方式来获得某一个数据元素,或者通过指定下标范围来获得一组序列的元素,这种访问序列的方式叫做切片. 访问某一个数据元素的的语法如下: sequence[index] ...
- 查看linux系统常用的命令,Linux查看系统配置常用命令
一.linux CPU大小 cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep &qu ...
- c 建立工程 常见错误及心得总结
1. 调用函数里面的 调用子函数,要是出现已定义错误,则要看看,是不是主函数的 头文件写成.c啦,因为在.h里面也定义可一次,要是写.c出现两次 错误提示:UrlCheck.obj : error L ...
- 20.allegro.铺铜[原创]
1.内层铺铜 --- ---- 选择复制对象 ---- ----- ---- ------ --- --- --- 2.外层铺铜 -- -- 假如没有指定网络: 给这块没有网络的铜皮指定网络 --- ...
- 《OD学hive》第四周0717
一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...
- java I/O总结
IO是非常重要的一块,但通常又被人们所忽视,这里希望能有个很清晰的介绍.自己学习的同时希望能够给别人带来一些帮助,对文章中用到其他作者(已经给出了链接)的图片在这里表示感谢! IO的分类 java I ...
- [转]深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- JAVA反射技术的使用
前言 在开发html使用jquery提交post的时候,可以使用jquery遍历from元素里面的input元素实现参数组合,这样就不用手动打参数了,特别是在参数很多的时候,费神费时. 我开发Andr ...
- How does browsersync work?
How Does BrowserSync Work? BrowserSync starts a small web server. If you’re already using a local we ...
- 基于Bootstrap的超酷jQuery开关按钮插件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAAA2CAIAAAC0tsfoAAAB/0lEQVR4nO3bQWrCQBTGcc/mbVz0DD