说明
方案一、使用jacob可以将office文件转换成pdf,因为需要依赖Microsoft Office,适用于windows服务器部署的项目。
方案二、如果需要用Linux服务器,请考虑使用OpenOffice方案。
本文详细介绍如何使用jacob完成pdf转换
maven引入jar
<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>
//https://sourceforge.net/projects/jacob-project/下载jacob.jar本地目录
<systemPath>D:/.m2/repo/jacob-1.19/jacob.jar</systemPath>
</dependency>
PPT转PDF代码
//测试
public class TestJacob {
public static void main(String [] args) {
IJacob iJacob = new PPTFactory();
IJacobPdfService service = iJacob.getJacob();
service.toPdf("F:\\蛇口渔港概况 .pptx", "F:\\a .pdf");
}
}
//ppt转pdf
public class PPTApi implements IJacobPdfService {
private static final Integer PPT_TO_PDF_OPERAND = 32;
@Override
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();
/*
* call
* param 4: ReadOnly
* param 5: Untitled指定文件是否有标题
* param 6: WithWindow指定文件是否可见
* */
ppt = Dispatch.call(ppts, "Open", sourcePath, true, true, false).toDispatch();
// ppSaveAsPDF为特定值32
Dispatch.call(ppt, "SaveAs", targetPath, PPT_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();
}
}
}
//service
public interface IJacobPdfService {
Integer EXCEL_TO_PDF_OPERAND = 0;
Integer WORD_TO_PDF_OPERAND = 17;
Integer PPT_TO_PDF_OPERAND = 32;
/**
* to pdf
* @param sourcePath
* @param targetPath
*/
void toPdf(String sourcePath, String targetPath);
}
//get jacob
public interface IJacob {
/**
* getJacob
* @return
*/
IJacobPdfService getJacob();
}
//ppt factory
public class PPTFactory implements IJacob {
@Override
public IJacobPdfService getJacob() {
return new PPTApi();
}
}
测试效果
转换前
转换后
可以看到效果还是不错的。