java操作Word挺不方便的,工具是有很多,但是不管如何純java的方法效果總是不盡人意。例如doc格式轉pdf這個需求我試了很多辦法都不成功,最后只好另辟蹊徑用外部腳本調用com組件的方式去做。畢竟對word操作能力最強大的還是office本身。 這種方法的限制在于,只能在windows服務器上運行,服務器還必須安裝了合適版本的office。
vbs是微軟自家的東西,調用起com很簡單,直接上代碼:
path = createobject("Scrapplication")Set docx = word.Documents.Open(path & "/" & "tmp.doc")docx.SaveAs path & "/" & "tmp.pdf",17docx.close(doNotSaveChanges)word.Quitset docx = nothingSet 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.Pathset fs = CreateObject("Scripting.FileSystemObject")dim oExcel,oWb,oSheetSet 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文檔的大部分操作。
新聞熱點
疑難解答