java调用vbs将word、excel文档转换成pdf

2/10/2017来源:ASP.NET技巧人气:1339

java操作Word挺不方便的,工具是有很多,但是不管如何纯java的方法效果总是不尽人意。例如doc格式转pdf这个需求我试了很多办法都不成功,最后只好另辟蹊径用外部脚本调用com组件的方式去做。毕竟对word操作能力最强大的还是office本身。 这种方法的限制在于,只能在windows服务器上运行,服务器还必须安装了合适版本的office。

实现

vbs是微软自家的东西,调用起com很简单,直接上代码:

path = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path Set word = CreateObject("Word.application") Set docx = word.Documents.Open(path & "\" & "tmp.doc") docx.SaveAs path & "\" & "tmp.pdf",17 docx.close(doNotSaveChanges) word.Quit set docx = nothing Set word = nothing

保存为word2pdf.vbs文件就可在windows上直接运行,作用是将同目录下的tmp.doc另存为tmp.pdf

java中调用外部程序(这里是调用cmd.exe执行vbs):

package com.poi.test; import java.io.IOException; public class VbsTest { public static void main(String[] args) { String vbsFileName = "D:\\\\word2pdf\\\\word2pdf.vbs"; final String cpCmd = "cmd /c start " + vbsFileName; Thread t = new Thread() { @Override public void run() { try { PRocess process = Runtime.getRuntime().exec(cpCmd); try { int val = process.waitFor(); System.out.println("val = "+val); } catch (InterruptedException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }; t.start(); try { t.join(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }

注意事项

需要注意几点: 1.office2010版本亲测可行,其他版本未知; 2.格式转换需要时间,如果需要马上读pdf文件则要设置等待; 3.在tomcat以服务方式启动时,web后台java的Runtime.exec()方法失效,需要以命令行方式启动tomcat。 4.vbs脚本一旦运行失败中途退出,很可能导致WORD.EXE进程残留,下次运行需要先杀掉这个进程

扩展

用vbs还可以调用office文档中的vba函数(宏),可以实现各种强大的功能 例如下面这个脚本就是调用宏实现Excel转pdf:

path = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path set fs = CreateObject("Scripting.FileSystemObject") dim oExcel,oWb,oSheet Set oExcel= CreateObject("Excel.Application") Set oWb = oExcel.Workbooks.Open(path & "\" & "tmp.xls") Set oSheet = oWb.Sheets(1) oExcel.Run "saveaspdf" oExcel.Quit

宏saveaspdf是在tmp.xls里事先录制好的,保存在Sheet1里。通过录制宏–java调用vbs–vbs调用宏,可以完成对office文档的大部分操作。