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格式=0pdfFile,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
***********************************************************************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电影网站|基于SSM+vue的电影网站系统(源码+数据库+文档)

电影网站 目录 基于SSMvue的电影网站系统 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

Linux sliplogin命令教程:如何使用sliplogin命令建立SLIP服务器(附实例详解和注意事项)

Linux sliplogin命令介绍 sliplogin&#xff08;Serial Line Internet Protocol Login&#xff09;命令用于将SLIP接口加入标准输入&#xff0c;把一般终端机的连线变成SLIP连线。通常可用来建立SLIP服务器&#xff0c;让远端电脑以SLIP连线到服务器。 Linux sliplogin命令适…

贪心算法-----柠檬水找零

今日题目&#xff1a;leetcode860 题目链接&#xff1a;点击跳转题目 分析&#xff1a; 顾客只会给三种面值&#xff1a;5、10、20&#xff0c;先分类讨论 当收到5美元时&#xff1a;不用找零&#xff0c;面值5张数1当收到10美元时&#xff1a;找零5美元&#xff0c;面值5张数…

未授权访问:JBoss未授权访问漏洞

目录 1、漏洞原理  2、环境搭建 3、未授权访问 4、利用jboss.deployment getshell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬…

【Ubuntu 安装erlang】

apt-get 安装 apt-get install erlang或 源码安装 git clone https://github.com/erlang/otp.git cd otp git checkout maint-25 # current latest stable version ./configure make make install安装完后&#xff0c;验证是否成功 # 命令行输入 erl

7.用户、角色、菜单表SQL

用户与角色是 多对多的关系&#xff1b; 角色与菜单权限 多对多的关系&#xff1b; 菜单权限表 create table acl_permission (id char(19) not null DEFAULT COMMENT 编号,pid CHAR(19) not null DEFAULT COMMENT 所属上级,name VARCHAR(20) not NULL DEFAULT COMMENT …

C语言经典例题-7

1.计算三角形的周长和面积 题目描述&#xff1a; 根据给出的三角形3条边a, b, c&#xff08;0 < a, b, c < 100,000&#xff09;&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边&#xff08;能构成三角形&#xff09;&#xff0c;中间用…

【ARM 嵌入式 C 入门及渐进 12.3 -- 将数值的第 s 位到 e 位清零】

请阅读【嵌入式开发学习必备专栏】 文章目录 将数值的第 s 位到 e 位清零 将数值的第 s 位到 e 位清零 为了定义一个VAL_CLR_BITS(val, s, n)宏&#xff0c;该宏将变量val的第s位到第n位清零&#xff08;假设n > s&#xff09;&#xff0c;其余位的值保持不变&#xff0c;我…

系统集成项目管理工程师第4章思维导图发布

2024年开年&#xff0c;软考系统集成项目管理工程师官方教程&#xff0c;迎来了阔别7年的大改版&#xff0c;改版之后的软考中项考试&#xff0c;离同宗兄弟高项考试渐行渐远。 中项第3版教程&#xff0c;仅仅从教程来看&#xff0c;其难度已经不亚于高级的信息系统项目管理师&…

数据结构与算法学习笔记三---循环队列的表示和实现(C语言)

目录 前言 1.为啥要使用循环队列 2.队列的顺序表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍栈和队列的表示和实现。 1.为啥要使用循环队列 上篇文章中我们知道了顺序队列…

Hive Transaction事务表(含实现原理)

Hive Transaction事务表 在Hive中&#xff0c;事务表&#xff08;Transactional Tables&#xff09;允许用户执行事务性操作&#xff0c;包括ACID&#xff08;原子性、一致性、隔离性、持久性&#xff09;特性。事务表是在Hive 0.14版本引入的&#xff0c;并且在后续版本中不断…

LabVIEW天然气压缩因子软件设计

LabVIEW天然气压缩因子软件设计 项目背景 天然气作为一种重要的能源&#xff0c;其压缩因子的准确计算对于流量的计量和输送过程的优化具有关键意义。传统的计算方法不仅步骤繁琐&#xff0c;而且难以满足现场快速响应的需求。因此&#xff0c;开发一款既能保证计算精度又便于…

使用Pandas对Data列进行基于顺序的分组排列

目录 一、引言 二、Pandas库简介 三、按照数据列中元素出现的先后顺序进行分组排列 四、案例分析 五、技术细节探讨与扩展应用 1. 技术细节 2. 扩展应用 3. 示例代码&#xff1a;用户行为分析 4. 进阶应用&#xff1a;分组后的聚合操作 5. 分组后的数据筛选 6. 分组…

【DevOps】Linux 安全:iptables 组成、命令及应用场景详解

导读&#xff1a;全面掌握 iptables&#xff1a;从基础到实践 在 Linux 系统中&#xff0c;iptables 是一个非常强大的工具&#xff0c;它不仅是系统管理员用来构建和管理网络防火墙的首选工具&#xff0c;而且也是一个功能丰富的网络流量处理系统。无论是进行包过滤、监控网络…

学习笔记:【QC】Android Q qmi扩展nvReadItem/nvWriteItem

一、qmi初始化 流程图 初始化流程: 1、主入口&#xff1a; vendor/qcom/proprietary/qcril-hal/qcrild/qcrild/rild.c int main(int argc, char **argv) { const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **); rilInit RIL_Init; funcs rilInit…

孩子通过编程可以收获什么?

编程是一种高度创造性的活动&#xff0c;它可以帮助孩子们培养出许多有价值的技能和品质。通过学习编程&#xff0c;孩子们可以收获以下几点&#xff1a; 逻辑思维能力 编程是一种需要严密的逻辑思维和分析能力的活动。在编程过程中&#xff0c;孩子们需要理清思路&#xff0c;…

李彦宏回顾大模型重构百度这一年

“大模型我们走在最前面&#xff0c;我们需要去勇闯无人区&#xff0c;需要去冒前人没有冒过的风险。”近日&#xff0c;在百度一场内部颁奖活动中&#xff0c;百度创始人、董事长兼首席执行官李彦宏指出&#xff0c;百度一直坚信技术可以改变世界&#xff0c;会一直沿着这条路…

docker的centos容器使用yum报错

错误描述 学习docker过程中&#xff0c;基于 centos 镜像自定义新的镜像。拉取一个Centos镜像&#xff0c;并运行容器&#xff0c;容器安装vim&#xff0c;报错了。 报错&#xff1a;Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

python视频转码脚本

今天有一个临时的需求&#xff0c;就是需要将一个wmv的初步转码成mp4的格式。找了一圈&#xff0c;免费的工具少&#xff0c;即使有免费的工具&#xff0c;在功能上也是有所限制&#xff0c;或者会给你塞广告或者附带安装其它流氓小游戏或者杀毒程序。 我并非不支持正版&#…

C++面向对象学习笔记五

本文主要讲解运算符重载&#xff0c;由于白鳯大佬没有具体讲解&#xff0c;所以本文自行补充了运算符重载的相关知识 目录 文章目录 前言 运算符重载 加号运算符重载 左移运算符重载 递增运算符重载 总结 前言 本文主要对于运算符重载进行探讨&#xff0c;分别对于成员函数重…