在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。
另外一个原因是,代码里面依赖的jacob.jar的版本与,部署时放入System32和jdk/bin的dll版本不一致导致的。(项目实施过程发现)
最后看看转换效果。