ppt转pdf的java实现

一、实现方式

java采用jacob包的功能,把ppt演示文稿转换为pdf。

支持文件格式:pptx,ppt

二、事先准备

1、依赖于office,需安装office办公软件

2、需要下载一个 jacob-1.20-x64.dll的文件,放到java的bin目录下。

文件可以网上搜索下载。也可以点击百度网盘下载链接:

https://pan.baidu.com/s/16y-N03KPQJkne6g4sMLAmg?pwd=ix4j

三、Java转换代码

1、maven包依赖:

XML 复制代码
        <dependency>
            <groupId>com.jacob</groupId>
            <artifactId>jacob</artifactId>
            <version>1.20</version>
        </dependency>

2、java转换类:JacobUtil.java

主要看ppt2PDF方法。

java 复制代码
package com.lan.fts.util;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *  excel word ppt转pdf
 *  未完全完善
 * @author LAN
 * @date 2021年07月01日
 */
public class JacobUtil {

    private static Logger log = LoggerFactory.getLogger(JacobUtil.class);
    private static final Integer WORD_TO_PDF_OPERAND = 17;
    private static final Integer PPT_TO_PDF_OPERAND = 32;
    private static final Integer EXCEL_TO_PDF_OPERAND = 0;

    public static void word2PDF(String inputFile, String pdfFile) {
        ComThread.InitSTA();
        ActiveXComponent app = new ActiveXComponent("Word.Application");
        try {
            app.setProperty("Visible", false);
            Dispatch docs = app.getProperty("Documents").toDispatch();

            Dispatch doc = Dispatch.call(docs, "Open", new Object[]{inputFile, false, true}).toDispatch();
            Dispatch.call(doc, "ExportAsFixedFormat", new Object[]{pdfFile, WORD_TO_PDF_OPERAND});
            Dispatch.call(doc, "Close", new Object[]{false});
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("转换出错:" + pdfFile);
        } finally {
            app.invoke("Quit");
            ComThread.Release();
        }
    }

    public static void excel2PDF(String inputFile, String pdfFile) {
        ComThread.InitSTA(true);
        ActiveXComponent app = new ActiveXComponent("Excel.Application");
        try {
            app.setProperty("Visible", false);
            app.setProperty("AutomationSecurity", new Variant(3));// 禁用宏
            Dispatch excels = app.getProperty("Workbooks").toDispatch();
            Object[] param1 = new Object[]{inputFile, new Variant(false), new Variant(false)};
            Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, param1, new int[9]).toDispatch();
            //转换
            Object[] param2 = new Object[]{
                    new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0
                    pdfFile,
                    new Variant(0)  //0=标准 (生成的PDF图片不会变模糊) ; 1=最小文件
            };
            Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, param2, new int[1]);
            //关闭
            Dispatch.call(excel, "Close", new Object[]{false});
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("转换出错:" + pdfFile);
        } finally {
            app.invoke("Quit");
            ComThread.Release();
        }
    }

    private static ActiveXComponent ppt_app = new ActiveXComponent("PowerPoint.Application");
    public static void ppt2PDF(String inputFile, String pdfFile) {
      //  ComThread.InitSTA();
        Dispatch ppts = ppt_app.getProperty("Presentations").toDispatch();
        try {
            /**
             * call
             * param 4: ReadOnly
             * param 5: Untitled指定文件是否有标题
             * param 6: WithWindow指定文件是否可见
             * */
            Dispatch ppt = Dispatch.call(ppts, "Open", new Object[]{inputFile, true, true, false}).toDispatch();
            Dispatch.call(ppt, "SaveAs", new Object[]{pdfFile, PPT_TO_PDF_OPERAND});
            //关闭
            Dispatch.call(ppt, "Close");
        } catch (Exception e) {
            log.error("转换出错:" + inputFile, e);
            try{
                ppt_app.invoke("Quit");
            }catch (Exception e1){
                log.error("ppt_app.invoke(\"Quit\")关闭出错!",e);
            }finally{
                ppt_app = new ActiveXComponent("PowerPoint.Application");
            }
        } finally {
      //      ppt_app.invoke("Quit");
      //      ComThread.Release();
        }
    }
}

四、运行测试

java 复制代码
    public static void main(String[] args) {
        JacobUtil.ppt2PDF("D:\\data\\out\\lanhezhong文件转换.pptx", "D:\\data\\out\\lanhezhong文件转换.pptx.pdf");
    }

运行结果:

总结: ppt转pdf转换的结果比较好,基本上保持ppt的原本内容格式。

***********************************************************************************************
author:蓝何忠
email:lanhezhong@163.com
***********************************************************************************************

相关推荐
我是何7 个月前
excel转pdf的java实现
pdf·excel·excel转pdf·lanhezhong·蓝何忠
我是何7 个月前
图片转pdf的java代码实现
itextpdf·图片转pdf·jpg转pdf·lanhezhong·蓝何忠
E-iceblue1 年前
Python实现PowerPoint(PPT/PPTX)到PDF的批量转换
python·格式转换·python库·ppt转pdf
Dickson1 年前
PPT转PDF转换器:便捷的批量PPT转PDF转换软件
ppt转pdf·powerpoint转pdf·批量ppt转pdf·ppt转pdf转换器·pptx转pdf