jacob操作word查詢替換轉為pdf
阿新 • • 發佈:2019-01-25
最近需要簡單操作word文件後轉為pdf,即查詢word中的替換字元將其替換為需要的引數,最後生成pdf,由於伺服器是在window平臺下,所以選擇了較為簡單的jacob去實現這一功能。
工具:myeclipse、office軟體、jacob元件如下:
步驟:
1、將下載好的jacob元件中的jacob.jar包加到專案中,myeclipse8適合版本為1.17 ,將相應的jacob-1.17.dll根據電腦系統型別(32位或64位)放到c盤system32目錄下,同時根據jdk的版本將jacob-1.17.dll放到jdk安裝目錄jre下的bin資料夾下。
2、在Word文件中用特殊字元佔位使用者簽名位置(例如:
3、Word版轉換為PDF版,完整程式碼如下:
import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class EditWord { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new EditWord().editWord(docPath, pdfPath); System.out.println("結束"); } // word文件 private Dispatch doc = null; // word執行程式物件 private ActiveXComponent wps = null; // 所有word文件集合 private Dispatch documents = null; // 選定的範圍或插入點 private Dispatch selection; private static String docPath = "word文件的路徑"; private static String pdfPath = "生成pdf檔案的路徑"; public synchronized boolean editWord(String docPath,String pdfPath){ ComThread.InitMTA(true);//執行緒啟動 File pdfFile = new File(pdfPath); long start = System.currentTimeMillis(); //啟動wps程式 wps = new ActiveXComponent("kwps.Application"); //設定程式不可見 wps.setProperty("Visible", new Variant(false)); // 禁用巨集 wps.setProperty("AutomationSecurity", new Variant(3)); //獲取所有文件 documents = wps.getProperty("Documents").toDispatch(); //獲取當前開啟的文件 doc = Dispatch.call(documents, "Open", docPath,false,true).toDispatch(); selection = Dispatch.get(wps, "Selection").toDispatch(); //查詢並替換相關內容 if(!replaceText("******佔位符()","需要傳入的引數")){ return false; }else{ try{ if(pdfFile.exists()){ pdfFile.delete(); } //呼叫另存為pdf命令 Dispatch.call(doc, "SaveAs", pdfPath, 17); long end = System.currentTimeMillis(); System.out.println("耗時:" + (end-start) + "ms."); } catch (Exception ex) { ex.printStackTrace(); System.out.println("轉化出錯:" + ex.getMessage()); return false; } finally { //關閉文件,wps,以及程序 Dispatch.call(doc, "Close", false); doc = null; System.out.println("關閉WPS"); if (wps != null) { wps.invoke("Quit", new Variant[]{}); wps = null; } documents = null; selection = null; ComThread.Release(); ComThread.quitMainSTA(); } return true; } } //查詢方法 @SuppressWarnings("static-access") public boolean find(String toFindText) { if (toFindText == null || toFindText.equals("")) return false; // 從selection所在位置開始查詢 Dispatch find = wps.call(selection, "Find").toDispatch(); // 設定要查詢的內容 Dispatch.put(find, "Text", toFindText); // 向前查詢 Dispatch.put(find, "Forward", "True"); // 設定格式 Dispatch.put(find, "Format", "True"); // 大小寫匹配 Dispatch.put(find, "MatchCase", "True"); // 全字匹配 Dispatch.put(find, "MatchWholeWord", "false"); // 查詢並選中 return Dispatch.call(find, "Execute").getBoolean(); } //替換方法 public boolean replaceText(String toFindText, String newText) { if (!find(toFindText)) return false; Dispatch.put(selection, "Text", newText); return true; } }
關於jacob操作word的詳細文件可以參考: