在Windos的環境要實現轉PDF會使用Jacob,如果環境是Linux服務器,請考慮使用OpenOffice。
1.首先下載 jacob 使用地址:https://sourceforge.net/projects/jacob-project/。
2.Maven包引用。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.19</version>
<scope>system</scope>
<!-- 將包考入maven配置 -->
<systemPath>D:/repository/com/jacob/jacob/jacob-1.19/jacob.jar</systemPath>
</dependency>
3.建立 Java 代碼。
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
public class PPTtoPdf {
// 32指定爲ppt轉pdf
private static final Integer FILE_TO_PDF_OPERAND = 32;
public static void main(String[] args) {
PPTtoPdf iJacob = new PPTtoPdf();
iJacob.toPdf("D:\\Temp\\patch\\asdf.pptx", "D:\\Temp\\patch\\a .pdf");
}
public void toPdf(String sourcePath, String targetPath) {
ActiveXComponent app = null;
Dispatch ppt = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("PowerPoint.Application");
Dispatch ppts = app.getProperty("Presentations").toDispatch();
ppt = Dispatch.call(ppts, "Open", sourcePath, true, true, false).toDispatch();
Dispatch.call(ppt, "SaveAs", targetPath, FILE_TO_PDF_OPERAND );
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if (ppt != null) {
Dispatch.call(ppt, "Close");
}
if (app != null) {
app.invoke("Quit");
}
ComThread.Release();
}
}
}
運行代碼存在報錯 :java.lang.NoClassDefFoundError: Could not initialize class com.jacob.com.ComThread
。
原因:受操作系統位數影響,Jacob無法使用。
解決辦法:C:\Windows\System32目錄和jdk/bin目錄下拷貝一份jacob.dll。
最後看看轉換效果。