1. 程式人生 > >jacob操作word查詢替換轉為pdf

jacob操作word查詢替換轉為pdf

最近需要簡單操作word文件後轉為pdf,即查詢word中的替換字元將其替換為需要的引數,最後生成pdf,由於伺服器是在window平臺下,所以選擇了較為簡單的jacob去實現這一功能。

工具:myeclipseoffice軟體、jacob元件如下:

 

步驟:

1、將下載好的jacob元件中的jacob.jar包加到專案中,myeclipse8適合版本為1.17 ,將相應的jacob-1.17.dll根據電腦系統型別(32位或64)放到csystem32目錄下,同時根據jdk的版本將jacob-1.17.dll放到jdk安裝目錄jre下的bin資料夾下。

2、在Word文件中用特殊字元佔位使用者簽名位置(例如:

******),利用jacob操作Word文件查詢特殊字元並替換為使用者名稱(需要傳入的引數),生成完整版的Word版本

3Word版轉換為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的詳細文件可以參考: