要实现office文档转换成MHTML文档,首先会将office文档转换成HTML格式的文档,然后将HTML文档转换成MHTML文档。要将office文档转成HTML需要使用Microsoft.HtmlTrans.Interface的程序集。这个程序集需要安装“HTML 转换服务器”。HTML 转换服务器是 Windows SharePoint Services 服务器场的可选组件。你可以在微软网站上找到该服务器的安装文件。按照下面的步骤安装:
解压缩下载的文件,里面有文件:
eng11probypass.mst
htmltrbackend.msi
HTML Viewer WhitePaper文档
如果已经安装了office,请先卸载,然后安装支持HTML Viewer Services的Office:
在Office安装路径下,找到Setup文件所在路径;
将eng11probypass.mst文件拷贝到该路径下;
在命令提示符下输入:Setup transforms= eng11probypass.mst来安装支持HTML Viewer的Office;
安装HTML Viewer Server:运行htmltrbackend.msi;
安装好以后,找到Microsoft.HtmlTrans.Interface.dll文件并把它copy到项目文件夹中。在项目中引用该文件。由于将用到命名空间Microsoft.HtmlTrans中的htmlTrLoadBalancer和htmlTrLauncher两个Romoting对象将office文档转换为HTML文件。
不过需要注意:
Document types not supported are:
Master documents in Word (see Word Help for an explanation of Master document)
Password protected documents, workbooks, and presentations (encrypted)
Word documents that use framesets
Files that contain Excel 4.0 macros
WordPerfect files
For files with embedded objects, VBA, scripts, etc, the following rules apply:
VBA is ignored and not executed; However, the VBA project (source code, dialog definitions, etc) is retained
Embedded and linked objects are converted to graphic images and displayed in the approximate location where they were in the source file
Linked or embedded objects with password protection are not converted
在实现中另外一个难点就是如何将HTML转换成MHTML。MHTML是 MIME Encapsulation of Aggregate HTML的缩写,它是一种网络编码格式,是用来定义在电子邮件正文中如何传送html内容的MIME标准。通俗点说,就是一个HTML文件和包括其中的.css文件、.js文件、图片等等一切的资源文件都整合在一个MHTL文件中。以下是一个典型的MHTML文件(;后为解释部分):
Mime-Version: 1.0
; Content-Location为主文件地址,可以随意设定
Content-Location: http://www.ietf.cnri.reston.va.us/
; Content-Type为MTHML文件的类型,这里表示MHTML文件中包含多种文件类型
;boundary定义文件之间的分隔符,可随意定义
;type为主文件格式
Content-Type: multipart/related; boundary="boundary-example";type="text/html"
;在前面加”--”字符表示一个文件开始
--boundary-example
;以下是文件头
; text/html 表示该文件的文件类型;charset表示使用的字符集
Content-Type: text/html; charset="ISO-8859-1"
; Content-Transfer-Encoding:表示的是该文件的编码类型;
;一般有两种:一种是文本类型的一般使用”QUOTED-PRINTABLE”;
;另一种是二进制文件一般使用”BASE64”
Content-Transfer-Encoding: QUOTED-PRINTABLE
;以下是正文
... text of the HTML document, which might contain URIs
referencing resources in other body parts, for example through
statements such as:
<IMG SRC="images/ietflogo1.gif" ALT="IETF logo1">
<IMG SRC="images/ietflogo2.gif" ALT="IETF logo2">
<IMG SRC="images/ietflogo3.gif" ALT="IETF logo3">
Example of a copyright sign encoded with Quoted-Printable: =A9
Example of a copyright sign mapped onto HTML markup: ¨
--boundary-example
; Content-Location:该文件的地址,可以是绝对地址或相对主文件的相对地址
;这里是绝对地址
Content-Location:http://www.ietf.cnri.reston.va.us/images/ietflogo1.gif
Content-Type: IMAGE/GIF
;二进制文件,使用BASE64编码
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--boundary-example
;这里是相对地址
Content-Location: images/ietflogo2.gif
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--boundary-example
Content-Location:http://www.ietf.cnri.reston.va.us/images/ietflogo3.gif
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
;注意这里是结束标记,表示MHTML文件已经结束了.在定义的分隔符前后都加上”--”
--boundary-example—
上面是标准的MHTML文件格式,但是按上面的标准是无法在IE里面正确浏览的。还需要注意以下几点:
1.凡是文本类型的文件所有的”=”替换成”=3D”,例如
<IMG SRC="images/ietflogo3.gif" ALT="IETF logo3">
要替换成
<IMG SRC=3D"images/ietflogo3.gif" ALT=3D"IETF logo3">
2. 所有的BASE64编码的文件必须要换行;
3. 每个文件开头的分隔符要在前加上”--”,而最后一个分隔符要在前后加上”--”;
4. 正文与文件头和下一个文件的分割符都要有换行符。
废话就说这么说了。接下来还是看看具体实现的代码。
虽然代码比较多,但是可以直接编译使用的代码。建议copy下来放到工程项目中使用VS.NET来阅读代码。也可以按照上面说的步骤安装好以后,直接使用该类。如果不能编译的话,请确实安装是否成功,是否在工程项目中引用
 具体代码
具体代码
解压缩下载的文件,里面有文件:
eng11probypass.mst
htmltrbackend.msi
HTML Viewer WhitePaper文档
如果已经安装了office,请先卸载,然后安装支持HTML Viewer Services的Office:
在Office安装路径下,找到Setup文件所在路径;
将eng11probypass.mst文件拷贝到该路径下;
在命令提示符下输入:Setup transforms= eng11probypass.mst来安装支持HTML Viewer的Office;
安装HTML Viewer Server:运行htmltrbackend.msi;
安装好以后,找到Microsoft.HtmlTrans.Interface.dll文件并把它copy到项目文件夹中。在项目中引用该文件。由于将用到命名空间Microsoft.HtmlTrans中的htmlTrLoadBalancer和htmlTrLauncher两个Romoting对象将office文档转换为HTML文件。
不过需要注意:
Document types not supported are:
Master documents in Word (see Word Help for an explanation of Master document)
Password protected documents, workbooks, and presentations (encrypted)
Word documents that use framesets
Files that contain Excel 4.0 macros
WordPerfect files
For files with embedded objects, VBA, scripts, etc, the following rules apply:
VBA is ignored and not executed; However, the VBA project (source code, dialog definitions, etc) is retained
Embedded and linked objects are converted to graphic images and displayed in the approximate location where they were in the source file
Linked or embedded objects with password protection are not converted
在实现中另外一个难点就是如何将HTML转换成MHTML。MHTML是 MIME Encapsulation of Aggregate HTML的缩写,它是一种网络编码格式,是用来定义在电子邮件正文中如何传送html内容的MIME标准。通俗点说,就是一个HTML文件和包括其中的.css文件、.js文件、图片等等一切的资源文件都整合在一个MHTL文件中。以下是一个典型的MHTML文件(;后为解释部分):
Mime-Version: 1.0
; Content-Location为主文件地址,可以随意设定
Content-Location: http://www.ietf.cnri.reston.va.us/
; Content-Type为MTHML文件的类型,这里表示MHTML文件中包含多种文件类型
;boundary定义文件之间的分隔符,可随意定义
;type为主文件格式
Content-Type: multipart/related; boundary="boundary-example";type="text/html"
;在前面加”--”字符表示一个文件开始
--boundary-example
;以下是文件头
; text/html 表示该文件的文件类型;charset表示使用的字符集
Content-Type: text/html; charset="ISO-8859-1"
; Content-Transfer-Encoding:表示的是该文件的编码类型;
;一般有两种:一种是文本类型的一般使用”QUOTED-PRINTABLE”;
;另一种是二进制文件一般使用”BASE64”
Content-Transfer-Encoding: QUOTED-PRINTABLE
;以下是正文
... text of the HTML document, which might contain URIs
referencing resources in other body parts, for example through
statements such as:
<IMG SRC="images/ietflogo1.gif" ALT="IETF logo1">
<IMG SRC="images/ietflogo2.gif" ALT="IETF logo2">
<IMG SRC="images/ietflogo3.gif" ALT="IETF logo3">
Example of a copyright sign encoded with Quoted-Printable: =A9
Example of a copyright sign mapped onto HTML markup: ¨
--boundary-example
; Content-Location:该文件的地址,可以是绝对地址或相对主文件的相对地址
;这里是绝对地址
Content-Location:http://www.ietf.cnri.reston.va.us/images/ietflogo1.gif
Content-Type: IMAGE/GIF
;二进制文件,使用BASE64编码
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--boundary-example
;这里是相对地址
Content-Location: images/ietflogo2.gif
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--boundary-example
Content-Location:http://www.ietf.cnri.reston.va.us/images/ietflogo3.gif
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
;注意这里是结束标记,表示MHTML文件已经结束了.在定义的分隔符前后都加上”--”
--boundary-example—
上面是标准的MHTML文件格式,但是按上面的标准是无法在IE里面正确浏览的。还需要注意以下几点:
1.凡是文本类型的文件所有的”=”替换成”=3D”,例如
<IMG SRC="images/ietflogo3.gif" ALT="IETF logo3">
要替换成
<IMG SRC=3D"images/ietflogo3.gif" ALT=3D"IETF logo3">
2. 所有的BASE64编码的文件必须要换行;
3. 每个文件开头的分隔符要在前加上”--”,而最后一个分隔符要在前后加上”--”;
4. 正文与文件头和下一个文件的分割符都要有换行符。
废话就说这么说了。接下来还是看看具体实现的代码。
虽然代码比较多,但是可以直接编译使用的代码。建议copy下来放到工程项目中使用VS.NET来阅读代码。也可以按照上面说的步骤安装好以后,直接使用该类。如果不能编译的话,请确实安装是否成功,是否在工程项目中引用
 具体代码
具体代码(转载自:http://mscenter.edu.cn/zhuanti/dianziqikan/15/E-newsletter_childpage12.htm)
 
                    
                     
                    
                 
                    
                 
        


 
   
 
    }
       } }
} 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号