您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 使用jacob将word转成PDF
项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:一、了解Jacob先了解一下概念,JACOB就是JAVA-COMBridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。下载地址:=109543&package_id=118368二、Jacob安装1、我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件2、将压缩包解压后,Jacob.jar添加到Libraries中;3、将Jacob.dll放至“WINDOWS\SYSTEM32”下面。需要注意的是:【使用IDE启动Web服务器时,系统读取不到Jacob.dll,例如用MyEclipse启动Tomcat,就需要将dll文件copy到MyEclipse安装目录的“jre\bin”下面。一般系统没有加载到Jacob.dll文件时,报错信息为:“java.lang.UnsatisfiedLinkError:nojacobinjava.library.path”】三、使用Jacob转换Word,Excel为HTMLJAVA代码:Java代码1.importjava.io.BufferedReader;2.importjava.io.BufferedWriter;3.importjava.io.File;4.importjava.io.FileInputStream;5.importjava.io.FileNotFoundException;6.importjava.io.FileWriter;7.importjava.io.IOException;8.importjava.io.InputStreamReader;9.10.importcom.jacob.activeX.ActiveXComponent;11.importcom.jacob.com.Dispatch;12.importcom.jacob.com.Variant;13.14.publicclassTransformFiletoHtml15.{16.intWORD_HTML=8;17.intWORD_TXT=7;18.intEXCEL_HTML=44;19.20./**21.*WORD转HTML22.*@paramdocfileWORD文件全路径23.*@paramhtmlfile转换后HTML存放路径24.*/25.publicvoidwordToHtml(Stringdocfile,Stringhtmlfile)26.{27.ActiveXComponentapp=newActiveXComponent(Word.Application);//启动word28.try29.{30.app.setProperty(Visible,newVariant(false));31.Dispatchdocs=app.getProperty(Documents).toDispatch();32.Dispatchdoc=Dispatch.invoke(docs,Open,Dispatch.Method,newObject[]{docfile,newVariant(false),newVariant(true)},newint[1]).toDispatch();33.Dispatch.invoke(doc,SaveAs,Dispatch.Method,newObject[]{htmlfile,newVariant(WORD_HTML)},newint[1]);34.Variantf=newVariant(false);35.Dispatch.call(doc,Close,f);36.}37.catch(Exceptione)38.{39.e.printStackTrace();40.}41.finally42.{43.app.invoke(Quit,newVariant[]{});44.}45.}46.47./**48.*EXCEL转HTML49.*@paramxlsfileEXCEL文件全路径50.*@paramhtmlfile转换后HTML存放路径51.*/52.publicvoidexcelToHtml(Stringxlsfile,Stringhtmlfile)53.{54.ActiveXComponentapp=newActiveXComponent(Excel.Application);//启动excel55.try56.{57.app.setProperty(Visible,newVariant(false));58.Dispatchexcels=app.getProperty(Workbooks).toDispatch();59.Dispatchexcel=Dispatch.invoke(excels,Open,Dispatch.Method,newObject[]{xlsfile,newVariant(false),newVariant(true)},newint[1]).toDispatch();60.Dispatch.invoke(excel,SaveAs,Dispatch.Method,newObject[]{htmlfile,newVariant(EXCEL_HTML)},newint[1]);61.Variantf=newVariant(false);62.Dispatch.call(excel,Close,f);63.}64.catch(Exceptione)65.{66.e.printStackTrace();67.}68.finally69.{70.app.invoke(Quit,newVariant[]{});71.}72.}73.74./**75.*/删除指定文件夹76.*@paramfolderPath文件夹全路径77.*@paramhtmlfile转换后HTML存放路径78.*/79.publicvoiddelFolder(StringfolderPath)80.{81.try82.{83.delAllFile(folderPath);//删除完里面所有内容84.StringfilePath=folderPath;85.filePath=filePath.toString();86.java.io.FilemyFilePath=newjava.io.File(filePath);87.myFilePath.delete();//删除空文件夹88.}catch(Exceptione){e.printStackTrace();}89.}90.91./**92.*/删除指定文件夹下所有文件93.*@parampath文件全路径94.*/95.publicbooleandelAllFile(Stringpath)96.{97.booleanflag=false;98.Filefile=newFile(path);99.if(!file.exists())100.{101.returnflag;102.}103.if(!file.isDirectory())104.{105.returnflag;106.}107.String[]tempList=file.list();108.Filetemp=null;109.for(inti=0;itempList.length;i++)110.{111.if(path.endsWith(File.separator))112.{113.temp=newFile(path+tempList[i]);114.}115.else116.{117.temp=newFile(path+File.separator+tempList[i]);118.}119.if(temp.isFile())120.{121.temp.delete();122.}123.if(temp.isDirectory())124.{125.delAllFile(path+/+tempList[i]);//先删除文件夹里面的文件126.delFolder(path+/+tempList[i]);//再删除空文件夹127.flag=true;128.}129.}130.returnflag;131.}132.}调用JAVA代码:Java代码1.publicclassTest1{2.publicstaticvoidmain(String[]args){3.//TODOAuto-generatedmethodstub4.TransformFiletoHtmltrans=newTransformFiletoHtml();5.trans.wordToHtml(D:\\sinye.doc,D:\\sinye.html);6.}7.8.}只写了一个测试word转html的,excel转html的同理,在TransformFiletoHtml类中,写了两个方法,一个是删除文件夹的方法(delFolder()),一个是删除文件夹下所有文件的方法(delAllFile())。写这个的目的是出于:在word或者excel转html的过程中,除了生成制定的html页面外,jacob组件会生成一些转换html页面时相关的其它页面,但是这些相关的其它页面不是我们所需要的,因此想把它删除,其实不删除也可以,只是看着不爽,在测试中,发现,word有时不会生成这样的文件,而且即使生成了,也能删除掉,但是excel生成的文件却不能删除,还望高手们给予解答。另外,在你将excel转换html时,如果你的代码没问题,转换时,老提示什么存在用户区域的安全设置这什么的,会让你选择继续转换,还是取消。这是因为你转换的那个excel中写了保护,解决办法是在excel的工具-保护-允许用户编辑区域,删除里面的所有保护。整体思路参考上面的这篇文章使用jacob将word转换成HTML的,利用的是Word的另存为功能,在Office2007SP2之后,Office就可以另存为PDF了,可以使用这个方法将office另存为PDF文档。具体代码可以参考上文里面的,另存为哪种类型是由newvariant()里面的参数决定的。Dispatch.invoke(doc,SaveAs,Dispatch.Method,newObject[]{htmlfile,newVariant(WORD_HTML)},newint[1]);newVariant(),这里面的根据传入的参数不同,可以另存为不同的类型,但是在网上搜索了一个并没有找到有关这个参数类型的一个说明,自己尝试了一下,结果如下:0Doc1Dot2-5Txt6Rtf7Txt8、10htm11Xml12、16Docx13Docm14Dotx15Dotm17Pdf我使用的是office2010,不同版本的对应的应该不一样,我是写了这一小段程序来测试另存为的类型的。Java代码1.publicclassJacobTest{2.publicstaticvoidwordToPDF(Stringdocfile,StringtoFile,inttype){3.ActiveXComponentapp=newActiveXComponent(Word.Application);//启动word4.try{5.app.setProperty(Visible,newVariant(false));6.Dispatchdocs=app.getProperty(Documents).toDispat
本文标题:使用jacob将word转成PDF
链接地址:https://www.777doc.com/doc-3371845 .html