java中 jacob作用_【JAVA】JACOB使用简介
它允許在java中調用com接口自動組件,它使用JNI(本地調用程序)來進行本地調用COM庫。它可運行在x86和支持32位和64位Java虛擬機
X64的環境。
測試源碼包:
密碼: ej9u
JACOB項目的由來
首先,我們將了解JACOB項目的基本情況,探討在什么樣的情況下選擇它來完成您的任務
COM中暴露出來的方法,主要有兩種機制:早期綁定和晚期綁定。
大橋調用可以參考IBM的RJCB項目,它提供了一套高性能的解決方案。當然您需要了解更多的COM組件的細節,雖然框架為您完成了大部分的生成橋
RJCB僅支持那些提供早期綁定的虛函數表的接口的COM API。
而晚期綁定方式是通過IDispatch的接口來實現,類似的Java的反射機制,您可以按照名稱或者ID進行方法調用,這種設計主要目的是支持腳本語言操作COM,因為腳本是解釋執行的,通常都不支持指針也就沒有C
+中的虛函數表 ID
雅各開源項目提供的是一個JVM獨立的自動化服務器的實現,其核心是基于JNI技術實現的變異,調度等接口,設計參考了微軟VJ
+
+內置的通用自動化服務器,但是微軟的實現僅僅支持自身的JVM。通過雅各,您可以方便地在Java的語言中進行晚期綁定方式的調用,開源項目實現了一種簡單,靈活的Java與COM的通信方式,為您充分利用現有應用提供了可能。
Jacob安裝
下載jacob的zip包,如jacob-1.18-M3.zip。
將jacob.jar引入項目。
將dll庫放到指定位置,dll分為64位和32位,jacob-xx-x64.dll和jacob-xx-x32.dll,不知道放哪個都放上是一個好的選擇。
為了確保能使程序找到庫,可能考慮入到如下位置:
“WINDOWS\SYSTEM32”下面。
運行程序的jdk或jre的bin目錄下。
如果用MyEclipse,可以指定運行程序所用的jdk,否則要放入MyEclipse自己的jdk里一份。
一般系統沒有加載到Jacob.dll文件時,報錯信息為:”java.lang.UnsatisfiedLinkError:
no jacob in java.library.path”
Jacob基礎語法說明
ActiveXComponent ax = new ActiveXComponent("a1");
構建ActiveX組件實例,其中的a1的值和你需要調用的ActiveX控件有關
+———————————–+———————————–+
| MS控件名 | a1的值 |
+———————————–+———————————–+
| InternetExplorer | InternetExplorer.Application |
+———————————–+———————————–+
| Excel | Excel.Application |
+———————————–+———————————–+
| Word | Word.Application |
+———————————–+———————————–+
| Powerpoint | Powerpoint.Application |
+———————————–+———————————–+
| vb/java Script | ScriptControl |
+———————————–+———————————–+
| windows media Player | WMPlayer.OCX |
+———————————–+———————————–+
| Outlook | Outlook.Application |
+———————————–+———————————–+
| Visio | Visio.Application |
+———————————–+———————————–+
| DAO | DAO.PrivateDBEngine.35 |
+———————————–+———————————–+
| MultiFace | MultiFace.Face |
+———————————–+———————————–+
Dispatch ds = ax.getObject(). toDispatch();
獲取Dispatch對象,我們可以把每個Dispatch對象看成是對Activex控件的一個操作,這一步是獲得該ActiveX控件的控制權。
(注:淺析JACOB 中提到過Variant類,這里的ax.getObject()便是獲得該對象,我們將其轉化為任何對象(類型))
Dispatch.get(ds, “a1”);
返回Variant類型,獲取ds對象的a1屬性,通過to…()和get...()方法可以轉換為java的很多類型
Dispatch.put(ds, “a1”, …);
設置ds對象a1屬性,具體參數為…指定
ActiveXComponent有setProperty(“a1”,
…)和getProperty(“a1”)方法,比Dispatch的put和get方法方便!
Dispatch.invoke(ds, “a3”, a4, a5, a6).toDispatch();
說明:ds為要執行操作的對象,a3為要執行的操作名稱;a4一般為Dispatch.Method、Dispatch.Put、Dispatch.Get三種,正是這三種指定讓此方法可以執行put、set、call同樣操作;a5為一個對象數組,形如:new
Object[]{},一般的當Method時為三個參數,Get時沒有參數,Put是為兩個參數;a6一般為new
int[1]
Dispatch.call(ds, “a1”, …) .toDispatch();
和invoke差不多,執行a1名稱的操作,少了invoke中的a4和a6參數;…和invoke中newObject[]{}中參數一樣
所以Dispatch.call()和Dispatch.invoke()方法可以執行Dispatch.put()和Dispatch.set()的操作,反之不可以
Word中的屬性參數
Documents:所有文檔
Open:打開文檔
ActiveXComponent.Visible:設置編輯器是否可見
Tables:獲得所有的表格
Bookmarks:所有標簽
Selection:光標所在處或選中的區域
select:選中
typeParagraph:設置為一個段落
ParagraphFormat:段落格式,用alignment設置
alignment:1、居中,2、靠右,3、靠左
Add:新建一個word文檔
Close:關閉文檔,0不保存,-1保存,-2彈出框確認,注意ComThread.Release();關閉整個word進程
SaveAS:另存為
save:保存
printOut:打印
Application:得到ActiveXComponent的實例
WindowState:Application的屬性,表示窗口的大小,0、default,1、maximize,2、minimize
top、left、height、width:application的屬性,表示窗口的位置
ActiveXComponent.Quit:關閉所有word文檔,但是不退出整個word程序
Range:表示文檔中的一個連續范圍,由一個起始字符位置和一個終止字符位置定義,進而可以得到格式的信息
Item:得到指定的表格
Rows:得到表格的所有行
Cell:表格的一個單元格
Text:word的文本內容
InsertFile:插入文件
InsertRowsBelow:在指定的行下面插入一行
InsertAfter:在指定對象后插入
Delete:刪除,可以是表格的行
Count:返回數目,比如Rows、Tables的數目
Height:返回高度,比如行高、表格行的高
Split:拆分單元格,要指定行數和列數
Merge:合并單元格
Exists:指定的對象是否存在,返回bool值
Copy:復制
Paste:粘貼
Font:字體
Name:字體的名字
Bold:字體是否為粗體
Italic:字體是否為斜體
Underline:字體是否有下劃線
Color:顏色
Size:大小
Borders:指定邊框,-1為上邊框,-2左邊框,-3為下邊框,-4有右邊框,-5為橫向邊框,-6為縱向邊框,-7從左上角開始的斜線,-8從左下角開始的斜線
AutoFitBehavior:自動調整大小,1為內容自動調整大小,2為窗口自動調整大小
Content:去的內容
InLineShapes:
AddPicture:增加一張圖片,需要制定路徑
homeKey:光標移到開頭
moveDown:光標往下一行
moveUp:光標往上一行
moveRight:光標往左一列
moveLeft:光標往右一列
find:要查找的文本
Forward:向前查找
Format:查找的文本格式
MatchCase:大小寫匹配
MatchWholeWord:全字匹配
Execute:開始執行查找
總結
以上是生活随笔為你收集整理的java中 jacob作用_【JAVA】JACOB使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java调jacob包实现系统语音
- 下一篇: 超级手机病毒算是病毒吗?