您的位置:首页 > Web前端 > HTML

如何将offcie文档(.doc、.xls、.ppt)转换成mht文档(原理篇)

2005-11-20 00:53 666 查看
      如何将上传的office文档转换成MHTML文档使之能在IE中浏览。我曾经上网查了一下,期望能找到这方面的例子,不过可惜的是这方面的资料太少了。不过,经过研究还是成功的实现了。
      要实现office文档转换成MHTML文档,首先会将office文档转换成HTML格式的文档,然后将HTML文档转换成MHTML文档。要将office文档转成HTML需要使用Microsoft.HtmlTrans.Interface的程序集。这个程序集是需要安装“HTML 转换服务器”。HTML 转换服务器是 Windows SharePoint Services 服务器场的可选组件。你可以在微软网站上找到该服务器的安装文件,或单击这里下载。按照下面的步骤安装:
1. 解压缩下载的文件,里面有文件:
eng11probypass.mst
htmltrbackend.msi
HTML Viewer WhitePaper文档
2. 如果已经安装了office,请先卸载,然后安装支持HTML Viewer Services的Office:
在Office安装路径下,找到Setup文件所在路径;
将eng11probypass.mst文件拷贝到该路径下;
在命令提示符下输入:Setup transforms= eng11probypass.mst来安装支持HTML Viewer的Office;
3. 安装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. 正文与文件头和下一个文件的分割符都要有换行符。
      废话就说这么说了。接下来还是看看具体实现的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息