Word文档格式从doc转为mht

上传人:宝路 文档编号:5757700 上传时间:2017-09-07 格式:DOC 页数:43 大小:220.50KB
返回 下载 相关 举报
Word文档格式从doc转为mht_第1页
第1页 / 共43页
Word文档格式从doc转为mht_第2页
第2页 / 共43页
Word文档格式从doc转为mht_第3页
第3页 / 共43页
Word文档格式从doc转为mht_第4页
第4页 / 共43页
Word文档格式从doc转为mht_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《Word文档格式从doc转为mht》由会员分享,可在线阅读,更多相关《Word文档格式从doc转为mht(43页珍藏版)》请在金锄头文库上搜索。

1、Word 文档格式从 doc 转为 mht发布时间:2008 年 12 月 27 日 作者 :olivertan阅读次数:491 次 类别:学习 永久链接 Trackback 一、 Java 调用动态链接库的方法Java以其跨平台的特性深受人们喜爱,但正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决 Java对本地操作的一种方法就是 JNI。Java通过 JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是 DLL文件形式,在 UNIX机器上是 SO文件形式)。通过调用本地的库文件的内部方法,使 Java可以实现和本地机器的紧密联系

2、,调用系统级的各接口方法。但是 Java不能直接调用动态链接库,必须按照 JNI的开发步骤,利用C或 C+语言生成遵循 JNI规范的 dll文件。JNI 的开发步骤如下所示。1. 编写带有 native声明的方法的 java类;2. 使用 javac命令编译所编写的 java类,生成 class文件;3. 使用“javah 类名”生成扩展名为 h的头文件;4. C/C+程序引用生成的头文件,并实现本地方法;5. 将 C/C+编写的文件生成动态链接库;6. 将生成的 dll文件放到编译好的 java class文件目录下。具体的开发细节请参考 JNI规范(Java 本地接口规范),浏览地址:ht

3、tp:/www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/guide/jni/spec/jniTOC.doc.html二、 Java 与.Net 互操作使用 Office COM对象Java使用 Office COM 对象一般有以下两种途径。直接使用 JNI自定义实现方法Java通过 JNI调用本地方法,该本地方法存放在遵循 JNI规范的 C+程序生成的 dll文件中。由于 C+程序不是托管代码,不能直接访问 Office PIA,所以必须在 C+程序中使用托管代码(C#或 VB)访问 Office PIA,通过 Office PIA使用 Offi

4、ce COM 组件。这种方式虽然实现起来比较繁琐,但是可以灵活控制和维护。java 程序和 C+程序是相互透明的,可以分开维护。当 Office升级时,可以方便地更新 C+代码,重新生成动态链接库,而不必更新 Java代码。使用 Jacob等中间件Jacob顾名思义,就是 JAVA-COM Bridge,Jacob 也是间接使用了 JNI方式,封装了一些 COM对象的功能。Jacob 和其它第三方产品一样,只是自定义了若干的功能,并没有完全使用 Office COM对象,所以有一定的局限性。另外,当 Office升级时,如果这些中间件不能及时更新,将会影响应用系统的正常使用。本文的示例采用第一

5、种方式,Java 利用 JNI方法与.Net 互操作,通过Office PIA使用 Office COM 对象。三、 开发环境的配置Java环境的配置1、安装 JDK;2、设置系统变量 JAVA_HOME;3、将“%JAVA_HOME%bin”加入系统变量 PATH;4、将“%JAVA_HOME%libdt.jar; %JAVA_HOME%libtools.jar”加入系统变量 CLASSPATH。.Net环境的配置.Net环境需要安装以下软件:Microsoft Office 2003 and related SPs Microsoft .NET Framework and related

6、SPs Microsoft Visual Studio .NET 2003 与安装 Office XP不同,装好 Office 2003后,操作系统就自动装上Office PIA。通过访问 PIA(主程序集,Primary Interop Assembly)来使用由 Office 应用程序公开的 COM 组件。在 ASP和 VB中使用 Office的COM组件是很方便的,可以通过形如 CreateObject(Word.Application)的方式建立 OLE对象并操作它的属性。在.NET 中,微软提供了 PIA以方便 C+和C#程序员,但 C+是非托管代码,必须使用托管代码(C#或 VB)

7、访问 PIA。四、 开发 Java程序程序调用本地方法 Convert2mht 将 folder目录下的 doc文件批量转化为 mht文件。public class doc2mht public native boolean Convert2mht(String folder); /folder 存放要转化的 doc 文件static System.loadLibrary(doc2mht); public static void main(String args)boolean success = new doc2mht().Convert2mht(D:doc2mht); if(success

8、 = true)System.out.println(转化成功!);elseSystem.out.println(转化失败!); 在 Java程序中声明和使用本地方法(native)Convert2mht,该方法的实现在 doc2mht.dll 中,dll 文件由 C+程序编译而成,和 Java 的 class 文件放在同一目录下。使用命令“javah doc2mht”生成头文件 doc2mht.h,C+程序调用该头文件来生成所需的库文件。#include #ifndef _Included_doc2mht#define _Included_doc2mht#ifdef _cplusplusex

9、tern C #endifJNIEXPORT jboolean JNICALL Java_doc2mht_Convert2mht(JNIEnv *, jobject, jstring);#ifdef _cplusplus#endif#endif在具体实现的时候,我们只关心函数原型:JNIEXPORT jboolean JNICALL Java_doc2mht_Convert2mht(JNIEnv *, jobject, jstring);这里 JNIEXPORT和 JNICALL都是 JNI的关键字,表示此函数是要被 JNI调用的。函数的名称是 JAVA_再加上 java程序的 package

10、路径再加函数名组成的。而 jstring 是以 JNI为中介使 JAVA的 String 类型与本地的 string 沟通的一种类型。JNI 接口指针是本地方法的第一个参数,其类型是 JNIEnv。第二个参数随本地方法是静态还是非静态而有所不同。非静态本地方法的第二个参数是对对象的引用,而静态本地方法的第二个参数是对其 Java 类的引用。我们可以在 C+程序中用接口指针 env来操作 Java 对象。比如通过以下代码将 Java中的 String转化为 C+的字符串类型:const char* directory = env-GetStringUTFChars(folder, 0);五、 开

11、发 C+程序打开 VS.NET新建项目,在“Visual C+项目”中找“类库”,新建项目“doc2mht”。可以看到源文件中生成了默认的 doc2mht.cpp,把 java程序生成的 doc2mht.h 加到项目的头文件列表中覆盖默认文件。添加引用“Microsoft.Office.Interop.Word.dll”。右键单击项目,选“属性”,在“配置属性/常规/使用托管扩展”选择“是”,在“C/C+”中选 “常规”,在“附加包含目录”中输入“JAVA_HOMEinclude; JAVA_HOMEincludewin32”,其中JAVA_HOME 用你自己的 JDK 安装主目录代替。在 “

12、解析#using 引用”中输入“D:VSNETEnterpriseFrameworks”,同样,用你自己的 PIA 安装目录代替,一般在 Microsoft Visual Studio .NET 2003 安装目录下。打开文件 doc2mht.cpp,用以下程序覆盖默认代码。#include stdafx.h#include doc2mht.h#include #using mscorlib.dll#using Microsoft.Office.Interop.Word.dllusing namespace System;using namespace System:Reflection;us

13、ing namespace System:IO;using namespace Microsoft:Office:Interop;/使用 Office COM 组件将 doc 文件批量转化为 mht 文件JNIEXPORT jboolean JNICALL Java_doc2mht_Convert2mht(JNIEnv *env, jobject obj, jstring folder)bool success = false; /转化是否成功const char* directory = env-GetStringUTFChars(folder, 0); /将 Java中的 String 转

14、化为 C+的字符串类型,directory 下存放要转化的 doc 文件System:String* files = Directory:GetFiles(directory); /获取directory 下所有文件的文件名,文件名包括完整的路径信息System:String* docType = Sdoc; /要转化的格式System:String* mhtType = Smht; /转化后的格式System:String* split = S.; /用来分割文件名以获取文件格式System:Char splits = split-ToCharArray();int wdFormatWebA

15、rchive = 9; /转化用的参数System:Object* wordSaveAsFormat = dynamic_cast(_box (wdFormatWebArchive); /将非托管数据 wdFormatWebArchive 强制转化为托管数据System:Object* oMissing = System:Reflection:Missing:Value; /转化用的参数Word:ApplicationClass* pWord = new Word:ApplicationClass(); /COM 对象Word:Documents* pDocs = pWord-Documents;tryConsole:WriteLine(开始转化 doc 文件.);for(int i = 0; i Length; i+)System:String* inputFile = filesi; /文件名System:String* parts = inputFile-Split(splits); /分割文件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号