使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
来源:互联网 发布:mysql 客户端 编辑:程序博客网 时间:2024/05/17 00:19
Jacob全称位java com bridge,通过该插件,可以使用Java语言编写程序,调用COM、ActiveX组件来操作Windows本地程序。
参考一位网友的例子,我写了一个程序,用来将word批量转换为txt等格式的文档。
该程序核心部分,仅仅是调用了Jacob的几个类,实现了调用Word打开指定的word文档,并在指定的目的路径中将其另存为指定的文档格式,简而言之,就是“Open”,“save As”。
Jacob能够实现的远不止这点,操作word的Java插件有不少,功能强大的Jacob可以为首。
因为程序是调用本地Office进行的打开、另存为操作,所以需要本地安装有word,并且,不同的office版本操作的结果自然是不同的。
我使用的是word2010,在word2010下可以打开97-2003doc文档和2007-2010docx文档,保存的格式也有docx、pdf,而在word2003版本下,该功能实习不了。如果有兴趣测试的话,在word2003的环境下,可以把相关的代码注释掉。
下边附上源代码:
/** *@author eyuan */package per.eyuan.word2txt.core;import com.jacob.*;import com.jacob.com.*;import com.jacob.activeX.*;import java.io.*;import java.util.Scanner;public class Core { /** * 实现转换的函数 * @param sourceFilesPath * @param destinationFilesPath * @param destinationFilesType * @return void * @see import com.jacob.activeX.*; */ public boolean change(String sourceFilesPath,String destinationFilesPath,int destinationFilesType){ //使用word文件所在的目录(源路径)建立目录文件 File sourcePathFile=new File(sourceFilesPath); //取得word文件(源文件列表) File sourceFilesList[]=sourcePathFile.listFiles(); System.out.println("共有"+sourceFilesList.length+"个文件(文件夹)"); //指定要转换的文件所在的目录下,如果有子目录, //则进入子目录,继续查找word文档并将其转换, //直到将指定目录下的所有word文档转换完。 //子目录名 String sourceChildPath=new String(""); //保持原来的层次关系,将子目录下的文件存放在新建的子目录中 String destiNationChildPath=new String(""); //检索文件,过滤掉非word文件,通过扩展名过滤 for(int i=0;i<sourceFilesList.length;i++){ //排除掉子文件夹 if(sourceFilesList[i].isFile()){ System.out.println("第"+(i+1)+"个文件:"); //取得文件全名(包含扩展名) String fileName=sourceFilesList[i].getName(); String fileType=new String(""); //取得文件扩展名 fileType=fileName.substring((fileName.length()-4), fileName.length()); //word2007-2010扩展名为docx //判断是否为word2007-2010文档,及是否以docx为后缀名 if(fileType.equals("docx")){ System.out.println("正在转换。。。"); //输出word文档所在路劲 System.out.println("目录:"+sourceFilesPath); //输出word文档名 System.out.println("文件名:"+fileName); //System.out.println(fileName.substring(0, (fileName.length()-5))); //核心函数 //启动word ActiveXComponent app=new ActiveXComponent("Word.Application"); //要转换的文档的全路径(所在文件夹+文件全名) String docPath=sourceFilesPath+"\\"+fileName; //转换后的文档的全路径(所在文件夹+文件名) String othersPath=destinationFilesPath+"\\"+fileName.substring(0,(fileName.length()-5)); // String inFile=docPath; String outFile=othersPath; // boolean flag=false; //核心代码 try{ //设置word可见性 app.setProperty("Visible", new Variant(false)); // Dispatch docs=app.getProperty("Documents").toDispatch(); //打开word文档 Dispatch doc=Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1]).toDispatch(); //0:Microsoft Word 97 - 2003 文档 (.doc) //1:Microsoft Word 97 - 2003 模板 (.dot) //2:文本文档 (.txt) //3:文本文档 (.txt) //4:文本文档 (.txt) //5:文本文档 (.txt) //6:RTF 格式 (.rtf) //7:文本文档 (.txt) //8:HTML 文档 (.htm)(带文件夹) //9:MHTML 文档 (.mht)(单文件) //10:MHTML 文档 (.mht)(单文件) //11:XML 文档 (.xml) //12:Microsoft Word 文档 (.docx) //13:Microsoft Word 启用宏的文档 (.docm) //14:Microsoft Word 模板 (.dotx) //15:Microsoft Word 启用宏的模板 (.dotm) //16:Microsoft Word 文档 (.docx) //17:PDF 文件 (.pdf) //18:XPS 文档 (.xps) //19:XML 文档 (.xml) //20:XML 文档 (.xml) //21:XML 文档 (.xml) //22:XML 文档 (.xml) //23:OpenDocument 文本 (.odt) //24:WTF 文件 (.wtf) //另存为指定格式的文档 Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]); // Variant file=new Variant(false); //关闭文档 Dispatch.call(doc, "Close",file); // flag=true; }catch(Exception e){ e.printStackTrace(); System.out.println("文档转换失败"); }finally{ app.invoke("Quit",new Variant[]{}); } System.out.println("转换完毕"); } //word97-2003扩展名为doc //判断是否为word2003-2007文档,及是否以doc为后缀名 else if(fileType.equals(".doc")){ System.out.println("正在转换。。。"); //输出word文档所在路劲 System.out.println("目录:"+sourceFilesPath); //输出word文档名 System.out.println("文件名:"+fileName); //System.out.println(fileName.substring(0, (fileName.length()-4))); //核心函数 //启动word ActiveXComponent app=new ActiveXComponent("Word.Application"); //要转换的文档的全路径(所在文件夹+文件全名) String docPath=sourceFilesPath+"\\"+fileName; //转换后的文档的全路径(所在文件夹+文件名) String othersPath=destinationFilesPath+"\\"+fileName.substring(0,(fileName.length()-4)); // String inFile=docPath; String outFile=othersPath; // boolean flag=false; //核心代码 try{ //设置word可见性 app.setProperty("Visible", new Variant(false)); // Dispatch docs=app.getProperty("Documents").toDispatch(); //打开word文档 Dispatch doc=Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1]).toDispatch(); //另存为指定格式的文档 Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]); // Variant file=new Variant(false); //关闭文档 Dispatch.call(doc, "Close",file); // flag=true; }catch(Exception e){ e.printStackTrace(); System.out.println("文档转换失败"); }finally{ app.invoke("Quit",new Variant[]{}); } System.out.println("转换完毕"); } //文档的扩展名不是doc或docx else{ System.out.println("非word文档"); } } //如果是子文件夹,则递归遍历,将所有的word文档转换 else{ // sourceChildPath=sourceFilesPath; //该文件是目录 sourceChildPath=sourceChildPath+"\\"+sourceFilesList[i].getName()+"\\"; System.out.println("源文件所在路径:"+sourceChildPath); //修改目标文件夹,保持原来的层级关系 destiNationChildPath=destinationFilesPath; destiNationChildPath=destinationFilesPath+"\\"+sourceFilesList[i].getName()+"\\"; System.out.println("转换后文件所在路径"+destiNationChildPath); // mkdir(destiNationChildPath); //递归遍历所有目录,查找word文档,并将其转换 change(sourceChildPath, destiNationChildPath,destinationFilesType); } } System.out.println("所有文档转换完毕"); return true; } /** * 用于创建文件夹的方法 * @param mkdirName */ public void mkdir(String mkdirName){ try{ //使用指定的路径创建文件对象 File dirFile = new File(mkdirName); // boolean bFile = dirFile.exists(); //已经存在文件夹,操作???提醒是否要替换 if( bFile == true ) { System.out.println("已经存在文件夹"+mkdirName); } //不存在该文件夹,则新建该目录 else{ System.out.println("新建文件夹"+mkdirName); bFile = dirFile.mkdir(); if( bFile == true ){ System.out.println("文件夹创建成功"); }else{ System.out.println(" 文件夹创建失败,清确认磁盘没有写保护并且空件足够"); System.exit(1); } } }catch(Exception err){ System.err.println("ELS - Chart : 文件夹创建发生异常"); err.printStackTrace(); }finally{ } } /** * 判断某个文件夹是否存在 * @param path */ /** * 将形如D:\word的路径转换为D:\\word */ public String changePath(String path){ String newPath=""; StringBuffer sb=new StringBuffer(); for(int i=0;i<path.length();i++){ sb.append(path.charAt(i)); if(path.charAt(i)=='\\') sb.append('\\'); } newPath=sb.toString(); System.out.println(newPath); return newPath; } public boolean isPathExist(String path){ boolean isPathExist=false; try{ File pathFile = new File(path); if(pathFile.exists()) isPathExist= true; else isPathExist= false; }catch(Exception err){ err.printStackTrace(); } return isPathExist; } /** * 主函数 */ public static void main(String[] args){ Core c=new Core();// c.changePath("D:\\word"); Scanner sc=new Scanner(System.in); //源文档所在路径 String sourceFilesPath=""; // String inputSourcePath="";// boolean sourcePathFlag=true;// System.out.println("请输入要转换文档所在的文件夹");// while(sourcePathFlag){// inputSourcePath=sc.next();// if(!isPathExist(inputSourcePath))// System.out.println("源路径不存在,请输入正确的路径");// else// sourcePathFlag=false;// }// sourceFilesPath=inputSourcePath; sourceFilesPath="D:\\word"; //目标文档要存放的目录 String destinationFilesPath="";// String inputdestinationPath="";// boolean destinationPathFlag=true;// System.out.println("请输入转换后文档要存放的文件夹");// while(destinationPathFlag){// inputdestinationPath=sc.next();// //目标文件不存在时,是否要提示用户创建文件// if(!isPathExist(inputdestinationPath))// System.out.println("目标路径不存在,请输入正确的路径");// else// destinationPathFlag=false;// }// destinationFilesPath=inputdestinationPath; destinationFilesPath="D:\\txt"; //选择要转换的类型 int destinationFilesType=0; int inputNumber=0; boolean numFlag=true; System.out.println("您要将word文档转换为哪种文档格式?"); System.out.println("0:doc \t 2:txt \t 6:rtf \t 8:html \t 9:mht \t 11:xml \t 12:docx \t 17:pdf \t 18:xps"); while(numFlag){ inputNumber=sc.nextInt(); if(inputNumber!=2&&inputNumber!=6&&inputNumber!=8&&inputNumber!=9&&inputNumber!=11&&inputNumber!=12&&inputNumber!=17){ System.out.println("您的输入有误,请输入要转换的文档类型前的数字"); }else numFlag=false; } destinationFilesType=inputNumber; //实行转换 c.change(sourceFilesPath, destinationFilesPath,destinationFilesType); //测试各种类型转换// for(int i=0;i<25;i++){// destinationFilesType=i;// System.out.println("文件类型"+destinationFilesType); // System.out.println("存放目录:"+destinationFilesPath+"\\"+i);// mkdir(destinationFilesPath+"\\"+i);// change(sourceFilesPath, destinationFilesPath+"\\"+i,destinationFilesType);// } }}
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- word文档转换为PDF、jpg、HTML、txt、swf
- 将word文档转换为html、PDF等
- Java使用Jacob转换Word为HTML
- Java使用Jacob转换Word为HTML
- Java使用Jacob转换Word为HTML
- Java使用Jacob转换Word为HTML
- Java使用Jacob转换Word为HTML
- jacob word 转换为 html
- 使用jacob调用Windows的com对象,转换Office文件为pdf、html等
- 使用Jacob调用word将word转换为html
- 如何使用jacob将word转换为PDF
- 如何使用jacob将word转换为PDF
- 如何使用jacob将word转换为PDF
- 如何使用jacob将word转换为PDF
- Android Surface Canvas
- javascript 实现 html 页面 table 导出 excel
- linux 下汇编初体验
- Javascript 常用脚本
- stamps
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- PHP 语言结构(Language constructs)和函数的区别
- [面试问答] 面试常问的40个问题 附带经典答案!
- ubuntu 步步为营之uclinux编译和移植(完整版)
- HTTP 416 错误 – 所请求的范围无法满足 (Requested Range not satisfiable)
- 整数类型
- from ibatis2.x to mybatis 3.x
- Linux下Bash的操作环境相关,issue,motd,login shell,non-login shell,source,stty,set
- SYBASE 有用网址