Eclipse下整合OpenOffice要注意的問題
來源:互聯網
上載者:User
OpenOffice是一款優秀的開源辦公套件,由sun公司貢獻給開源社區。如果在Eclipse下繼承它,則相當於給Eclipse添加了辦公套件的支援。為此,筆者進行了嘗試,如下。
OpenOffice提供了若干Jar包,專門提供在Java裡面嵌入OpenOffice和調用OpenOffice服務的方法。在其內建的例子中,有OfficeBean和OfficeDev可供參考。但是,如果把他們直接採用SWT_AWT嵌入時,會出現找不到officebean庫的異常。經分析,原因在於officeben.jar中的LocalOfficeConnection檔案載入officebean庫時,採用了如下代碼:
String aSharedLibName = getProgramPath() + java.io.File.separator + System.mapLibraryName(OFFICE_LIB_NAME);
System.load(aSharedLibName);
而getProgramPath()採用
File path = NativeLibraryLoader.getResource(this.getClass().getClassLoader(), aExec);
其中,aExec為soffice.exe檔案,即OpenOffice的開機檔案名稱。NativeLibraryLoader.getResource採用 classloader.getResource(s) 載入資源。
問題就出現在最後的classloader.getResource(s)。在普通的Java程式中,只要在PATH路徑裡面設定了OpenOffice的路徑,並且把OpenOffice的路徑傳遞給classpath,則通過classloader.getResource(s)可以正確的找到soffice.exe,從而可以正確得到aSharedLibName的路徑。但是在Eclipse下,無論怎樣設定PATH和傳遞classpath都不能使Eclipse找到soffice,從而載入庫錯誤。
找到問題的根源後,直接修改getProgramPath()就可以了。為了在客戶機上不用安裝OpenOffice,把OpenOffice安裝之後的目錄拷貝到外掛程式目錄下,然後採用如下代碼擷取外掛程式的目錄:
mProgramPath = Platform.getBundle("org.openoffice").getLocation()+"program"; if(mProgramPath.indexOf("@/")>0) {
mProgramPath=mProgramPath.substring(mProgramPath.indexOf("@/")+2);
}
這樣就可以載入了。但是別忘記了在PATH中設定上述路徑,因為officebean在載入其他組件時採用預設,必須在PATH中設定路徑才能正確找到。這就要求製作安裝程式,由安裝程式把此路徑寫入PATH中。