当前位置: 首页 > news >正文

java调用jacob进行文件转换ppt转pdf或者png

java调用jacob进行文件转换ppt转pdf或者png

前情提要

  • 最近项目上,遇到一个复杂的ppt,最终要求是要将ppt每一页转成图片
  • 原本这个是不难,网上一搜一大堆案例,外加我本身也比较精通aspose,那还不是分分钟搞定。
  • 结果就是客户的那个ppt,非常的恶心,应该是excel生成的柱状图嵌在ppt中,导致无论我使用各种方式转换都会发生缺字少图的情况
  • 所以万般无奈之下,选择使用最原始的jacob调用office或者wps组件来进行转换,这玩意的原理就是jacob调用windwos的com组件,调用的就是注册表中的office或者wps的组件
  • 这种方式的好处是速度快,转出来和原来的图基本一致,比较容易符合客户需求。缺点就是依赖原本服务器上office或者wps,然后也基本只能使用windows做服务器,转换整个过程都是不可知的,而且也不受jvm管控

核心方法类

public static void testPPT() {String source = "D:\\test\\test.pptx";String target = "D:\\test\\test.pdf";long start = System.currentTimeMillis();ActiveXComponent app = null;Dispatch ppt = null;try {File targetFile = new File(target);if (targetFile.exists()) {targetFile.delete();}ComThread.InitSTA();app = new ActiveXComponent("Powerpoint.Application");Dispatch ppts = app.getProperty("Presentations").toDispatch();/** call* param 4: ReadOnly* param 5: Untitled指定文件是否有标题* param 6: WithWindow指定文件是否可见* */System.out.println("打开文档" + source);ppt = Dispatch.call(ppts, "Open", source, true, true, false).toDispatch();System.out.println("正在转换为PDF " + target);// 转换pdf值为32Dispatch.call(ppt, "SaveAs", target, 32); // 转换png值为18, 这里的target需要输入文件夹// Dispatch.call(ppt, "SaveAs", "D:\\test\\test", 18); long end = System.currentTimeMillis();System.out.println("转换完成用时:" + (end - start) + "ms.");} catch (Exception e) {e.printStackTrace();} finally {if (ppt != null) {Dispatch.call(ppt, "Close");}if (app != null) {app.invoke("Quit");}ComThread.Release();}}

注意事项

  • 我遇到的情况是就算是wps或者office,把复杂的ppt转换为pdf还是不一定和原来抱持一样,但是直接转换为PNG图片,基本可以确保和你直接打开ppt效果一致,但是坑爹的点在于,转换PNG的方式,它是会生成一个文件夹,然后里面是幻灯片1.PNG这种格式,所以得再改名来符合需求,这个就很简单了,网上都是。
  • 还有一点就是 new ActiveXComponent("Powerpoint.Application") 这个Powerpoint.Application,可以在电脑的注册表上找到
  • 在这里插入图片描述
    在这里插入图片描述

所以当这一行报错时,看看电脑是否装了wps或者office

  • 另一个需要注意的点
//当文件占用无法删除时,wps没有影响依旧能调用SaveAs方法,但是office则会报错,这是我这次发现的区别,需要注意
File targetFile = new File(target);
if (targetFile.exists()) {targetFile.delete();
}

相关文章:

java调用jacob进行文件转换ppt转pdf或者png

java调用jacob进行文件转换ppt转pdf或者png 前情提要 最近项目上,遇到一个复杂的ppt,最终要求是要将ppt每一页转成图片原本这个是不难,网上一搜一大堆案例,外加我本身也比较精通aspose,那还不是分分钟搞定。结果就是…...

鸿蒙HarmonyOS应用开发之使用DevEco Studio模板构建NDK工程

NDK通过CMake和Ninja编译应用的C/C代码,编译过程如下图所示。 核心编译过程如下: 根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake。 执行Ninja…...

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块,需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言:Java 框架:springboot vue JDK版本:JDK1.8(或11&#xf…...

工程企业的未来选择:Java版工程项目管理系统平台与数字化管理的融合

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…...

Vue使用el-statistic和el-card显示大屏中的统计数据

​ 一、页面内容&#xff1a; <el-row :gutter"20"><el-col :span"6"><el-card class"box-card"><div><el-statisticgroup-separator",":precision"2":value"value2":title"tit…...

12.2024

如下图所示&#xff0c;小明用从1开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 7 15 16 28 29... 35 8 14 17 27 30... 4 9 13 18 26 31... 10 12 19 25 32... 11 20 24 33... 21 23 34.. 22 35... 容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20行第20列的数是多少…...

【学习心得】Jupyter常用操作与魔法方法

一、安装与打开 Jupyter是什么我就不啰嗦了&#xff0c;直接安装&#xff1a; pip install jupyter 安装完后&#xff0c;在你想要打开的项目路径下&#xff0c;唤出CMD执行下面命令就可以使用jupyter notebook了 jupyter notebook 也可以用更加好用的jupyter lab&#xff0…...

Linux命令别名

别名是命令的快捷方式。对于需要经常执行&#xff0c;并需要很长时间输入的长命令创建快捷方式很有用。 临时修改 语法&#xff1a; alias 别名原命令 [选项] [参数][rootdd ~]# alias cdtcd /test #切换到/test下的快捷命令 删除别名&#xff1a; unalias 别名 unalias cd…...

Docker和 Containerd 的区别

自 Docker 开启了使用容器的爆发式增长&#xff0c;有越来越多的工具和标准来帮助管理和使用这项容器化技术&#xff0c;与此同时也造成了有很多术语让人感到困惑。 容器生态系统 容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。 幸运的是&…...

Qt实现TFTP Server和 TFTP Client(二)

3 实现 3.1 Core Core模块包括下面4个类&#xff1a; TFTPBaseUdpTFtpClientFileTFtpServerFile 3.1.1 TFTP TFTP类实现了TFTP协议。 3.1.1.1 TFTP定义 class TFtp { public:TFtp();enum Code {RRQ 0x0001,//Read requestWRQ 0x0002,//Write requestDATA 0x0003…...

【b站李炎恢】Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢

课程地址&#xff1a;【Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢】 https://www.bilibili.com/video/BV1U54y127GB/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 备注&#xff1a;虽然标题声明还在更新中&#xff0c;但是看一些常用…...

AI大语言模型工程师学习路线

文章目录 运行LLMSLLM APIS开源的大语言模型Prompt engineering1. 明确目标2. 理解模型能力3. 使用示例4. 精确和具体的指令5. 考虑上下文6. 避免偏见和不准确的信息7. 测试和迭代8. 使用模板9. 考虑多语言能力10. 注意伦理和合规性结构化输出1. 使用明确的提示(Prompts)2. 采…...

基于树莓派实现 --- 智能家居

最效果展示 演示视频链接&#xff1a;基于树莓派实现的智能家居_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tr421n7BM/?spm_id_from333.999.0.0 &#xff08;PS&#xff1a;房屋模型的搭建是靠纸板箱和淘宝买的家居模型&#xff0c;户型参考了留学时短租的公寓~&a…...

基于Arduino IDE 野火ESP8266模块 一键配网 的开发

一、配网介绍 ESP8266 一键配网&#xff08;也称为 SmartConfig 或 FastConfig&#xff09;是一种允许用户通过智能手机上的应用程序快速配置 ESP8266 Wi-Fi 模块的方法&#xff0c;而无需手动输入 SSID 和密码。为了实现这一功能&#xff0c;则需要一个支持 SmartConfig 的智能…...

左手医生:医疗 AI 企业的云原生提效降本之路

相信这样的经历对很多人来说并不陌生&#xff1a;为了能到更好的医院治病&#xff0c;不惜路途遥远奔波到大城市&#xff1b;或者只是看个小病&#xff0c;也得排上半天长队。这些由于医疗资源分配不均导致的就医问题已是老生长谈。 云计算、人工智能、大数据等技术的发展和融…...

ceph集群部署

1. 每台服务器各增加2块硬盘(类型最好是相同的) 2. 将三台主机名设为node1.openlab.edu、node2.openlab.edu、node3.openlab.edu 3. 登录所有主机&#xff0c;配置 /etc/hosts 文件 192.168.136.55 ceph1.openlab.edu ceph1 192.168.136.56 ceph2.openlab.edu ceph2 192.168…...

C#WPF控件Label宽度绑定到父控件的宽度

如何将Label的宽度绑定到它所在Grid的宽度。跟随父控件的宽度的改变而改变。 <Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&q…...

HMI的学习

什么是HMI&#xff1f;了解HMI或人机界面的一些基础知识_哔哩哔哩_bilibili Human Machine Interface 人机界面 在工业中使用HMI来控制和监视设备 常见的HMI是ATM机 通过屏幕和按钮来完成取款或存款 工业中&#xff0c;操作员或维护人员可以从HMI操作和监视设备。 它们可能…...

工业无线网关在汽车制造企业的应用效果和价值-天拓四方

随着智能制造的快速发展&#xff0c;工业无线网关作为关键通信设备&#xff0c;在提升生产效率、优化生产流程、实现设备间的互联互通等方面发挥着越来越重要的作用。以下是一个关于工业无线网关在智能制造行业应用的具体案例&#xff0c;展示了其在实际生产中的应用效果和价值…...

校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!

随着科技的不断发展&#xff0c;智慧校园系统和跑腿外卖小程序已经成为当今社会的热门话题。作为未来的重要趋势之一&#xff0c;科技在教育领域中的应用越来越广泛。本文将探讨智慧校园系统和跑腿外卖小程序的开发过程&#xff0c;并阐述如何利用科技“育”见未来 一、智慧校…...

AI气象模型统一基准:可复现、多源真值、时空一致的评测标尺

1. 这不是又一个“天气数据集”&#xff0c;而是一把标尺&#xff1a;为什么AI气象建模急需统一基准“AI Weather Models”这个词组最近两年在气象学会议、AI顶会和工业界技术白皮书里出现的频率&#xff0c;已经快赶上“大模型”本身了。但我和团队在去年参与三个不同机构的AI…...

B-Parameter小模型:精度、速度与成本的帕累托最优

1. 小模型正在悄悄改写游戏规则&#xff1a;为什么10B参数的模型能干翻100B巨兽&#xff1f;最近在几个技术团队做模型选型咨询&#xff0c;几乎每场讨论都会有人抛出这个问题&#xff1a;“我们业务场景明明很垂直&#xff0c;推理延迟要求严苛&#xff0c;GPU显存还卡在24G&a…...

驱动教学模式革新:广凌智慧教学融合平台如何实现个性化教学?

随着高等教育从“知识为主”向“能力为先”深刻转型&#xff0c;千人千面的个性化学习已成为未来教育的核心诉求。传统的统一内容、统一路径的教学模式&#xff0c;已难以满足学生差异化的发展需要。如何借助技术手段实现真正的因材施教&#xff1f;广凌智慧教学融合平台以人工…...

2026最新测评:4款海外降英文文本AIGC工具实测

我用GPT写了一篇英文技术报告&#xff0c;然后分别扔进4个降AI工具。结果出乎意料。如果你经常用ChatGPT、Claude或Gemini写英文内容——无论是论文摘要、技术文档、公司报告还是博客文章——你一定遇到过这个尴尬&#xff1a;明明内容是自己构思、自己修改的&#xff0c;但Tur…...

从零手写K-Means聚类算法:理解初始化、分配与收敛的底层原理

1. 项目概述&#xff1a;从零手写K-Means&#xff0c;不只是调包&#xff0c;而是真正理解聚类的“心跳”你有没有过这种感觉&#xff1a;调用sklearn.cluster.KMeans跑完一个聚类任务&#xff0c;结果图一出、轮廓系数一算&#xff0c;好像就结束了&#xff1f;但当同事问起“…...

UxPlay应用场景:从家庭娱乐到企业演示的全面解决方案

UxPlay应用场景&#xff1a;从家庭娱乐到企业演示的全面解决方案 【免费下载链接】UxPlay AirPlay Unix mirroring server 项目地址: https://gitcode.com/gh_mirrors/uxp/UxPlay UxPlay是一款功能强大的AirPlay Unix镜像服务器&#xff0c;它让Linux、macOS和Unix系统能…...

11.三层网络VXLAN

先把之前基于flat模式创建的虚机&#xff0c;全部删除 控制节点配置&#xff1a;1.修改配置文件/etc/neutron/neutron.conf 将[DEFAULT]区域 core_plugin ml2 service_plugins 修改为 core_plugin ml2 service_plugins router allow_overlapping_ips True2.修改/etc/neutro…...

ViMax 为什么会冲上 GitHub Trending:AI 视频生成开始从“出片”转向“制片”

今天刷 GitHub Trending 时&#xff0c;ViMax 这项目很难不注意到。它挂着 674 stars today 的当日热度&#xff0c;标题写得也很直接&#xff1a;Agentic Video Generation&#xff0c;导演、编剧、制片、视频生成一体化。真正让我觉得它值得写&#xff0c;不只是因为它又是一…...

多用户预付费电表箱

这款多用户预付费电表箱&#xff0c;专为高密度用电场景打造。采用集中式计量方案&#xff0c;25户仅需一块电表即可完成分户独立计量&#xff0c;相比传统分户电表&#xff0c;大幅节省安装空间与布线成本。箱体集成主断路器、分户空开、预付费电能表于一体&#xff0c;一户一…...

一文讲透|盘点2026年标杆级的AI论文网站

一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的AI论文网站神器&#xff0c;覆盖全流程生成、文献处理、降重润色、格式排版四大核心场景&#xff0c;帮你高效搞定毕业论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天…...