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包依赖:

        <dependency>
            <groupId>com.jacob</groupId>
            <artifactId>jacob</artifactId>
            <version>1.20</version>
        </dependency>

2、java转换类:JacobUtil.java

主要看ppt2PDF方法。

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

四、运行测试

    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
***********************************************************************************************

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现PPTPDF,可以使用Apache POI和Apache PDFBox两个Java库。具体步骤如下: 1. 使用Apache POI读取PPT文件,获取每一页的内容和样式信息。 2. 创建一个PDF文档对象,使用Apache PDFBox。 3. 将每一页的内容和样式信息写入PDF文档对象中。 4. 保存PDF文档对象到本地文件。 以下是一个简单的PPTPDFJava代码示例: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hslf.usermodel.HSLFSlideShow; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.tools.imageio.ImageIOUtil; public class PptToPdfConverter { public static void convert(String pptFilePath, String pdfFilePath) throws IOException { // 读取PPT文件 HSLFSlideShow ppt = new HSLFSlideShow(new FileInputStream(pptFilePath)); // 创建PDF文档对象 PDDocument pdf = new PDDocument(); // 遍历PPT每一页,将内容写入PDF文档对象中 for (int i = 0; i < ppt.getSlides().size(); i++) { PDPage page = new PDPage(); pdf.addPage(page); PDPageContentStream contentStream = new PDPageContentStream(pdf, page); contentStream.drawImage(new PDFRenderer(ppt.getSlides().get(i)).renderImageWithDPI(300), 0, 0); contentStream.close(); } // 保存PDF文档对象 pdf.save(pdfFilePath); pdf.close(); // 释放PPT文件资源 ppt.close(); } public static void main(String[] args) throws IOException { String pptFilePath = "test.ppt"; String pdfFilePath = "test.pdf"; convert(pptFilePath, pdfFilePath); } } ``` 该代码使用了Apache POI的HSLFSlideShow类读取PPT文件,使用了Apache PDFBox的PDDocument类创建PDF文档对象和PDPage类创建PDF页面对象,使用了PDFRenderer类将PPT页面换成PDF页面,使用了PDPageContentStream类将PDF页面写入PDF文档对象中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值