使用的是微軟官方的Microsoft Save as PDF,這個其實是微軟的office辦公組件的一個插件鄙早,安裝這個可以使辦公組件擁有一鍵轉換為pdf的功能,支持的組件包含:
Microsoft Office Access 2007
Microsoft Office Excel 2007
Microsoft Office InfoPath 2007
Microsoft Office OneNote 2007
Microsoft Office PowerPoint 2007
Microsoft Office Publisher 2007
Microsoft Office Visio 2007
Microsoft Office Word 2007
在系統(tǒng)中有office的情況下,下載或者安裝上述的插件造垛,即可。例如晰搀,打開word直接另存五辽,選擇pdf格式即可。
由于項目需求外恕,需要java后臺導出同一報表的word和pdf格式杆逗,因此考慮到先使用word模板生成word格式報表,然后將word報表通過上述的組件直接轉換為pdf提供下載鳞疲。
具體步驟如下:
1.首先在項目要部署的服務器上安裝office辦公軟件(這就限制了這種方法必須保證服務器系統(tǒng)是windows的)
2.在1的基礎上安裝Microsoft Save as PDF罪郊。
3.給項目添加jacob的jar包依賴。
4.將jacob-1.19-x64.dll和jacob-1.19-x86.dll兩個文件加到jdk所在目錄的bin文件夾下尚洽。
5.工具類如下
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* @author gaoxp
* @date 2019年3月13日下午4:08:13
* @description 將word轉換為pdf工具類
*/
public class Word2PDFUtil {
//pdf 格式
private static final int wdFormatPDF = 17;
public static void Word2PDF(String wordTempPath,String pdfTempPath) {
ActiveXComponent app = null;
Dispatch doc = null;
try {
app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
doc = Dispatch.call(docs, "Open" , wordTempPath).toDispatch();
File tofile = new File(pdfTempPath);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc,"SaveAs", pdfTempPath, wdFormatPDF);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
Dispatch.call(doc,"Close",false);
if (app != null)
app.invoke("Quit", new Variant[] {});
}
//結束后關閉進程
ComThread.Release();
}
}
6.使用示例
Word2PDFUtil.Word2PDF("D:/test.docx", "D:/test.pdf");
所需的Microsoft Save as PDF悔橄,jar包,兩個dll文件下載地址如下翎朱。
鏈接: https://pan.baidu.com/s/1xQTSeVTHQxIW3yDb4l_5cw 提取碼: 57jc