在很多企業級應用中都涉及到將office圖片轉換成pdf進行保存或者發佈的場景,因爲pdf格式的文檔方便進行加密和權限控制(類似於百度文庫)。總結起來目前將office文件轉換
成pdf的方法主要有兩種:
1、利用jcob調用ms office的com組件,將office文檔轉換成pdf。
2、利用jcob調用acrobat將office文檔轉換成pdf。
在實際使用中發現,由於office不同所以本的文件格式不一致,所以任何第三方的轉化工具都不可能完美的兼容所有office版本,最好的方案就是調用ms office提供的com組件來進
行轉換,就算office高版本出現,我們要做的也只是升級我們的office版本而已。
首先,利用office的com組件進行文檔轉換首先需要到jacob官網下載一個jacob.jar和jacob.dll,jacob.dll需要放到windows的system32下面,jacob.jar引用到java工程中。
其次,編寫代碼,初始化word進程,並返回word的所有document對象:
//打開word應用程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
//設置word不可見,否則會彈出word界面
app.setProperty("Visible", false);
//獲得word中所有打開的文檔,返回Documents對象
Dispatch docs = app.getProperty("Documents").toDispatch();
第三步,打開我們要轉換的word文檔:
//調用Documents對象中Open方法打開文檔,並返回打開的文檔對象Document
Dispatch doc = Dispatch.call(docs,
"Open",
"xxx.doc",
false,
true
).toDispatch();
最後,另存我們剛纔打開的文檔,並關閉word進程:
//調用Document對象的SaveAs方法,將文檔保存爲pdf格式
Dispatch.call(doc,
"ExportAsFixedFormat",
"xxx.pdf",
wdFormatPDF //word保存爲pdf格式
); //關閉文檔
Dispatch.call(doc, "Close",false);
//關閉word應用程序
app.invoke("Quit", 0);
附錄:完整代碼
public static void word2PDF(String inputFile,String pdfFile){
//打開word應用程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
//設置word不可見,否則會彈出word界面
app.setProperty("Visible", false);
//獲得word中所有打開的文檔,返回Documents對象
Dispatch docs = app.getProperty("Documents").toDispatch();
//調用Documents對象中Open方法打開文檔,並返回打開的文檔對象Document
Dispatch doc = Dispatch.call(docs,
"Open",
inputFile,
false,
true
).toDispatch();
//調用Document對象的SaveAs方法,將文檔保存爲pdf格式
Dispatch.call(doc,
"ExportAsFixedFormat",
pdfFile,
wdFormatPDF //word保存爲pdf格式
);
//關閉文檔
Dispatch.call(doc, "Close",false);
//關閉word應用程序
app.invoke("Quit", 0);
}