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

说明

方案一、使用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();
    }
}

测试效果

转换前

转换后

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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值