jacob 实现Office Word文件格式转换

关于jacob用法,百度一下就会发现几乎都是复制2004年一个代码,那段代码实现的是从一个目录读取所有doc文件,然后把它转html格式。 为了便习学习和使用,我把代码看懂后精简了一下,得出不少新结论,拿出来和大家分享。
2、一个具体的代码示例:
 package ccnu; 
import com.jacob.com.*; 
import com.jacob.activeX.*; 
import java.io.*; 
 
public class testCoding 

    /*
     * 作者:郭喜跃/【捂汗县长】
     * 时间:2013-7-20
     * 程序功能:调用jacob包,在Microsoft Office 能够支持打开的文件类型中随意进行格式转换(本程序不是批量转换,一次只能转单个文件)。
     * 由于我电脑上安装的是Office 2013,所以甚至可以实现pdf与txt!用起来很方便,除了注释 代码不算长吧?
     * 
     * */ 
    public static void main(String[] args) 
    { 
        //指定被转换文件的完整路径。 我这里的意图是把pdf转为txt  
        String path = new String("E:\\Jena\\Jena初体验0.pdf"); 
        //根据路径创建文件对象  
        File docFile=new File(path); 
        //获取文件名(包含扩展名)  
        String filename=docFile.getName(); 
        //过滤掉文件名中的扩展名  
        int filenamelength=filename.length(); 
        int dotposition=filename.indexOf("."); 
        filename=filename.substring(0,dotposition); 
         
        //设置输出路径,一定要包含输出文件名(不含输出文件的扩展名)  
        String savepath = new String ("E:\\Jena\\txt\\"+filename);   
         
        //启动Word程序  
        ActiveXComponent app = new ActiveXComponent("Word.Application");         
        //接收输入文件和输出文件的路径  
        String inFile = path; 
        String tpFile = savepath; 
        //设置word不可见  
        app.setProperty("Visible", new Variant(false)); 
        //这句不懂  
        Object docs = app.getProperty("Documents").toDispatch(); 
        //打开输入的doc文档  
        Object doc = Dispatch.invoke((Dispatch) docs,"Open", Dispatch.Method, new Object[]{inFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch(); 
         
        //另存文件, 其中Variant(n)参数指定另存为的文件类型,详见代码结束后的文字  
        Dispatch.invoke((Dispatch) doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(2)}, new int[1]); 
        //这句也不懂  
        Variant f = new Variant(false); 
        //关闭并退出  
        Dispatch.call((Dispatch) doc, "Close", f); 
        app.invoke("Quit", new Variant[] {}); 
        System.out.println("转换完毕。"); 
    } 
 

 
package ccnu;
import com.jacob.com.*;
import com.jacob.activeX.*;
import java.io.*;
 
public class testCoding
{
/*
* 作者:郭喜跃/【捂汗县长】
* 时间:2013-7-20
* 程序功能:调用jacob包,在Microsoft Office 能够支持打开的文件类型中随意进行格式转换(本程序不是批量转换,一次只能转单个文件)。
* 由于我电脑上安装的是Office 2013,所以甚至可以实现pdf与txt!用起来很方便,除了注释 代码不算长吧?
*
* */
public static void main(String[] args)
{
//指定被转换文件的完整路径。 我这里的意图是把pdf转为txt
String path = new String("E:\\Jena\\Jena初体验0.pdf");
//根据路径创建文件对象
File docFile=new File(path);
//获取文件名(包含扩展名)
String filename=docFile.getName();
//过滤掉文件名中的扩展名
int filenamelength=filename.length();
int dotposition=filename.indexOf(".");
filename=filename.substring(0,dotposition);
 
//设置输出路径,一定要包含输出文件名(不含输出文件的扩展名)
String savepath = new String ("E:\\Jena\\txt\\"+filename);
 
//启动Word程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
//接收输入文件和输出文件的路径
String inFile = path;
String tpFile = savepath;
//设置word不可见
app.setProperty("Visible", new Variant(false));
//这句不懂
Object docs = app.getProperty("Documents").toDispatch();
//打开输入的doc文档
Object doc = Dispatch.invoke((Dispatch) docs,"Open", Dispatch.Method, new Object[]{inFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
 
//另存文件, 其中Variant(n)参数指定另存为的文件类型,详见代码结束后的文字
Dispatch.invoke((Dispatch) doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(2)}, new int[1]);
//这句也不懂
Variant f = new Variant(false);
//关闭并退出
Dispatch.call((Dispatch) doc, "Close", f);
app.invoke("Quit", new Variant[] {});
System.out.println("转换完毕。");
}
 
}
 
 
 
        *其中第44行中的 invoke()函数中的Variant(n)参数指定另存为的文件类型(n的取值范围是0-25),他们分别是:
        *Variant(0):doc
        *Variant(1):dot
        *Variant(2-5),Variant(7):txt
        *Variant(6):rft
        *Variant(8),Variant(10):htm
        *Variant(9):mht
        *Variant(11),Variant(19-22):xml
        *Variant(12):docx
        *Variant(13):docm
        *Variant(14):dotx
        *Variant(15):dotm
        *Variant(16)、Variant(24):docx
        *Variant(17):pdf
        *Variant(18):xps
        *Variant(23):odt
        *Variant(25):与Office2003与2007的转换程序相关,执行本程序后弹出一个警告框说是需要更高版本的 Microsoft Works Converter
        *由于我计算机上没有安装这个转换器,所以不清楚此参数代表什么格式
        */
 

转载于:https://www.cnblogs.com/tomcattd/p/3544537.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021-07-22

leetcode547 第一次做这种题&#xff0c;有点生&#xff0c;借鉴 class Solution { public:void dfs(vector<vector<int>>& isConnected,vector<int>&isvisited,int i){for(int j0;j!isConnected.size();j){if(isConnected[i][j]1&&isvisit…

树的同构

输入样例1&#xff08;对应图1&#xff09;&#xff1a;8A 1 2B 3 4C 5 -D - -E 6 -G 7 -F - -H - -8G - 4B 7 6F - -A 5 1H - -C 0 -D - -E 2 -输出样例1:Yes输入样例2&#xff08;对应图2&#xff09;&#xff1a;8B 5 7F - -A 0 3C 6 -H - -D - -G 4 -E 1 -8D 6 -B 5 -E - -…

.Net 中的封装知识点

c # 中的封装 1&#xff0c;类与对象 生活中现有对象&#xff0c;然后人们先对其归类。 而程序中&#xff0c;先有类&#xff0c;再有对象。有了这些类&#xff0c;才能生成实际的对象&#xff0c;即类的实例化。&#xff08;类名new 一个对象&#xff09; 对象是从类里那东西的…

[家里蹲大学数学杂志]第236期钟玉泉复变函数论前六章第二组习题参考解答

第一章 复数与复变函数 1将复数 $$\bex \frac{(\cos5\varphii\sin 5\varphi)^2}{(\cos3\varphi-i\sin 3\varphi)^3} \eex$$ 化为指数形式. 解答: 由 Euler 公式, $$\bex \mbox{原式}\frac{(e^{i5\varphi})^2}{(e^{-i3\varphi})^3} e^{i[10\varphi-(-9\varphi)]}e^{19\varphi…

思想

思想是自由的&#xff0c;鞭策和束缚下的思想不会深刻&#xff0c;所以不要强迫自己去思考和学习&#xff0c;除非你在那里找到了乐趣&#xff1b; 思想是懒惰的&#xff0c;稍不留神就可能走入邪道&#xff0c;或者呼呼的在那里享受睡觉&#xff1b; 所以最好的办法是&#…

.Net 中的继承知识点

.Net 中的面向对象 继承 继承思想的应用是为了解决封装遗留下来的代码冗余的问题。但这是简单的理解。 在一个系统开发中会有重复的成员&#xff0c;所以找到这些共有的成员&#xff0c;把它们装进一个类中&#xff0c;即父类。 语法 A:B A类继承了B,B 是父类。 A类可访问B类中…

Java单例模式简单实现

代码 public class Singleton {private static Singleton singleton;//创建一个单例对象public static Singleton getSingleton(){if(singleton null){//判断对象是否为空singleton new Singleton();}return singleton;} } public class Test {public static void main(Strin…

2021-07-23

leetcode46 第一次写回溯的题&#xff0c;思想还是dfs&#xff0c;就是多了一步恢复原状态&#xff0c;之前好像也写过。每天做的有点少&#xff0c;得加油了 class Solution { public:vector<vector<int>> permute(vector<int>& nums) {vector<vec…

firefox flash-plugin怎样安装

1&#xff0c;到adobe官网上下载Linux的tar.gz的包&#xff1b; 2&#xff0c;tar -zxvf flash_player_npapi_linux.x86_64.tar.gz&#xff1b; 3&#xff0c;sudo cp libflashplayer.so /usr/lib/mozilla/plugins/&#xff1b; 4&#xff0c;重启Firefox&#xff0c;搞定。…

.Net中的多态知识点

多态&#xff0c;不同的对象对同一个方法有不同的响应。 目的&#xff0c;为了解决继承中父类访问子类方法要转型的问题。 还是继承的问题&#xff0c;父类实例化子类&#xff0c;被看成父类类型。 条件&#xff1a; 多态 (3种方式) 1, 基于继承 重写 父类实例子类化&#xff…

框架

http://kohanaframework.org/转载于:https://www.cnblogs.com/gaohuag/p/3549237.html

leetcode53 dp and 分治

leetcode53 1.dp动态规划 class Solution { public:int maxSubArray(vector<int>& nums) {int lennums.size();if(len0) return 0;if(len1) return nums[0];vector<int>dp(len,0);dp[0]nums[0];int max_numdp[0];int i1;for(;i!len;i){if(dp[i-1]>0)dp[i]d…

centos Ipython安装

1&#xff0c;直接 sudo yum install ipython可能出现问题&#xff0c;不一定能成&#xff1b; 2&#xff0c;可先安装下列东西&#xff0c;然后如上安装ipython sudo yum install python-matplotlib # 2D 绘图库 sudo yum install PyQt4 # Qt4 的 Python 绑定 sudo yum ins…

.Net 中接口应用的知识点(排序)

接口 接口可以看作是多态的一种。它打破了里氏替换原则。即不是共同的生物&#xff0c;比如动物&#xff08;狗&#xff09;和人&#xff08;老师&#xff09;&#xff0c;这两个类 却都有吃这种方法。但是继承里不能把老师和狗归为一个类。所以这时用接口来解决这种问题。 语法…

struts-config message-resources配置问题总结

问题&#xff1a;我的app无法读取配置好的ApplicationResources.properties中的内容 解答&#xff1a;文件目录为 /webapp /WEB-INF /classes ApplicationResources.properties /xxx /yyy SomeOther.properties struts-config.xml的内容是 <message-resources parameter&quo…

leetcode 88

leetcode 88 简简单单 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int j0;for(int im;i!mn;i){nums1[i]nums2[j];}sort(nums1.begin(),nums1.end());} };END

linux下memcache安装

安装配置 1. 安装libevent # tar zxf libevent-1.4.6-stable.tar.gz # cd libevent-1.4.6-stable # ./configure # make && make install 2. 安装memcached # tar zxvf memcached-1.2.6.tar.gz # cd memcached-1.2.6 # ./configure --prefix/usr/local/memcached-1.2.6…

集合与泛型集合与键值对集合

1&#xff0c;集合 &#xff08;Connections&#xff09; ArrayList arr new ArrayList();//可以add arr.Add("Hello girls!");//支持添加object类型,但不能用foreach &#xff0c;因为ArrayList是不确定类型。//Advantages&#xff1a;//1,object 类型 作为集合的类…

leetcode350C++

leetcode 350 哈希做法 没学过哈希&#xff0c;啥时候学一下 class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {unordered_map<int,int>m;vector<int>ret;for(int n:nums1){if(m.find(n)m.end…