2012-04-03 114 views
8

是否有人知道如何以编程方式在C#中生成.mht文件,其中嵌入了 嵌入式图像?事情是我已经意识到.mht文件 是能够嵌入图像,并且这个嵌入式图像 移动整个文件(mht),当你改变它的位置。和 这个文件可以查询不同的浏览器,包括IE 6.以编程方式生成.mht文件

我被告知尝试Data Url Scheme技术。但它不能工作,因为其他浏览器不支持 。例如IE 6.

+0

我一直在那里 - 尽管它很有可能做到这一点,甚至自己写它 - 不要去那里。 MHT非常专有,不受大多数​​现代浏览器的支持。我会首先考虑替代方案 – BrokenGlass 2012-04-03 19:20:02

+1

我认为最简单的方法是将一些简单的网页保存为.mht和IE,看看它是如何实现的。 – 2012-04-03 19:20:31

+1

我试图在IE上导出.mht文件。它似乎实施了Data Url Scheme技术。例如,如果在导出的文件(mht)中找到以下代码 – 2012-04-03 19:33:04

回答

5

这是可能的,肯定已经被别人做过 - 相关材料和库/源代码:

+0

我试过以上。看起来他们能够将 转换成一个html文件到mht。如果从网络访问 html文件,这将起作用。但是,如果您从本地驱动器访问 html文件,则 转换将不起作用。 以上来源使用此方法: CreateMHTMLBody(URL,CDO.CdoMHTMLFlags.cdoSuppressNone,“”,“”); – 2012-04-07 16:04:30

+0

我试图在html文件中嵌入图像的原因 是因为我正在创建一个窗体窗体应用程序 ,它必须导出带有图像的报告。 有没有办法完成,而不使用商业 图书馆? – 2012-04-07 16:08:16

+0

@chosenOneThabs在没有使用商业库的情况下做到这一点的唯一方法是自己实现完整的格式(仅部分记录)。 – Yahia 2012-04-07 16:46:50

1

我会从RFC 2557开始,这样我对我的工作有了一些基本的了解。然后去寻找处理它的code/libraries

据我所知,没有BCL类来处理MHTML。

+0

我尝试了以上。看起来他们能够将 转换成一个html文件到mht。如果从网络访问 html文件,这将起作用。但是,如果您从本地驱动器访问 html文件,则 转换将不起作用。 以上来源使用此方法: CreateMHTMLBody(URL,CDO.CdoMHTMLFlags.cdoSuppressNone,“”,“”); – 2012-04-07 16:07:01

+0

我试图在HTML文件 中嵌入图像的原因是因为我正在创建一个窗体窗体应用程序 ,它必须导出带有图像的报告。 有没有办法完成,而不使用商业 图书馆? – 2012-04-07 16:08:49

+0

将报告创建为模板。从ie导出。搜索/替换获取报告内容。 – 2012-04-08 05:20:23

5

在Windows环境中,您可以通过CDO.Message COM组件,它暴露了IMessage interface
而直接做到这一点,我不知道的细节在C#中导入的COM对象的,所以我会给你一个简单的例子在类似C的语法:

IMsgObj = CreateObject("CDO.Message") // create the object 
IMsgObj.CreateMHTMLBody("http://www.example.com/") // convert the URL to MHTML 
IMsgObj.GetStream().SaveToFile("output.mht") // save it to a file 

的CDO.Message组件的CLSID是{CD000001-8B95-11D1-82DB-00C04FB1625D}

请记住,该组件是用于生成电子邮件(.eml文件扩展名而不是.mht),这意味着不包含JavaScript文件。否则,它们大致相当。

+0

*对本地驱动器的html文件有效?* – Kiquenet 2016-10-22 09:23:06

+0

@Kiquenet,它应该工作。只需传递文件路径而不是URL – GetFree 2016-10-22 18:50:32

1

MSDN has a great article(2011年6月)关于如何使用CDO和System.Net.Mail创建MHT文件。完整包含C#源代码。我会在VB.Net或谷歌代码版本上面使用这个。

+1

备注:***使用CDO的主要缺点是:*** _COM Interop!_和 _不适用于64位系统(x64)_ – Kiquenet 2016-10-22 09:07:23

+0

注意: '*此示例(MSDN文章)不包含用于处理css背景图像和iframe的代码* – Kiquenet 2016-10-22 09:09:08