|
|
|
//Word 转 PDFpublic class Doc2PDF { private ActiveXComponent wordCom=null; private Dispatch wordDoc=null; private final Variant False=new Variant(false); private final Variant True=new Variant(true); /** * 打开word文檔 * @param filePath word文檔 * @return 返回word文文件对象 */ public boolean openWord(String filePath){//建立ActiveX部件wordCom=new ActiveXComponent("Word.Application"); try{//返回wrdCom.Documents的DispatchDispatch wrdDocs=wordCom.getProperty("Documents").toDispatch();//调用wrdCom.Documents.Open方法打开指定的word文檔,返回wordDocwordDoc=Dispatch.invoke(wrdDocs,"Open",Dispatch.Method,new Object[]{filePath},new int[1]).toDispatch();return true;}catch(Exception ex){ex.printStackTrace();}return false; } /** * 关闭word文檔 */ public void closeWord(){ //关闭word文件 if (wordCom!=null){ int save = 0; Variant doNotSaveChanges = new Variant(save); wordCom.invoke("Quit",new Variant[]{doNotSaveChanges}); wordCom=null; ComThread.Release(); } } /** * 将word文檔打印为PS檔后,使用Distiller将PS檔转换为PDF檔 * @param sourceFilePath 源文件路径 * @param destinPSFilePath 首先生成的PS文件路径 * @param destinPDFFilePath 生成PDF文件路径 */ public void docToPDF(String sourceFilePath,String destinPSFilePath,String destinPDFFilePath){ if (!openWord(sourceFilePath)){ closeWord(); return; } //建立Adobe Distiller的com对象 ActiveXComponent distiller=new ActiveXComponent("PDFDistiller.PDFDistiller.1"); try{ //设置当前使用的打印机,我的Adobe Distiller打印机名字为"Adobe PDF" wordCom.setProperty("ActivePrinter",new Variant("Adobe PDF")); //是否在后台运行 Variant Background=False; //是否追加打印 Variant Append =False; //打印所有文檔 int wdPrintAllDocument=0; Variant Range =new Variant(wdPrintAllDocument); //输出的postscript文件的路径 Variant OutputFileName =new Variant(destinPSFilePath); //调用word文文件对象的PrintOut方法:将word文檔打印为postscript文檔,简称ps文檔 Dispatch.callN(wordDoc, "PrintOut", new Variant[]{Background,Append,Range,OutputFileName}) ; System.out.println("由word文檔打印为ps文檔成功!"); //调用Distiller对象的FileToPDF方法所用的参数,详细内容参考Distiller Api手册 //作为输入的ps文文件路径 Variant inputPostScriptFilePath=new Variant(destinPSFilePath); //作为输出的pdf文文件的路径 Variant outputPDFFilePath=new Variant(destinPDFFilePath); //定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件 Variant PDFOption=new Variant(""); //调用FileToPDF方法将ps文檔转换为pdf文檔 Dispatch.callN(distiller,"FileToPDF",new Variant[]{inputPostScriptFilePath,outputPDFFilePath,PDFOption}); System.out.println("由ps文檔转换为pdf文檔成功!"); } catch(Exception ex){ ex.printStackTrace(); } finally{ closeWord(); } } public static void main(String[] argv){ Doc2PDF d=new Doc2PDF(); d.docToPDF("c:\\tmp\\w.doc","c:\\tmp\\ww.ps","c:\\tmp\\www.pdf"); }} |
|