干货!java实现如何把PPT转PDF的两种方法,别再说你不会!(一)

说明

方案一、使用jacob可以将office文件转换成pdf,因为需要依赖Microsoft Office,适用于windows服务器部署的项目。

方案二、如果需要用Linux服务器,请考虑使用OpenOffice方案。

本文详细介绍如何使用jacob完成pdf转换

maven引入jar


     com.google.guava
     guava
     19.0



     com.jacob
     jacob
     1.19
     system
     //https://sourceforge.net/projects/jacob-project/下载jacob.jar本地目录
     D:/.m2/repo/jacob-1.19/jacob.jar

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();
    }
}

测试效果

转换前

干货!java实现如何把PPT转PDF的两种方法,别再说你不会!(一)_第1张图片

转换后

干货!java实现如何把PPT转PDF的两种方法,别再说你不会!(一)_第2张图片

可以看到效果还是不错的。

你可能感兴趣的:(Java,java)