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

pptx转pdf工具类

引入依赖

      <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.0-RC1</version></dependency>

工具类

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.poi.xslf.usermodel.*;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
public class FileConvertUtil {public static void convertPPTXtoPDF(String pptxFilePath, String pdfFilePath) {try (FileInputStream inputStream = new FileInputStream(pptxFilePath);FileOutputStream outputStream = new FileOutputStream(pdfFilePath)) {XMLSlideShow pptx = new XMLSlideShow(inputStream);PDDocument pdfDoc = new PDDocument();File imageTempDir = Files.createTempDirectory("pptx_to_pdf").toFile();int pageNum = 0;for (XSLFSlide slide : pptx.getSlides()) {for (XSLFShape shape : slide.getShapes()) {if (shape instanceof XSLFTextShape) {XSLFTextShape textShape = (XSLFTextShape) shape;for (XSLFTextParagraph textParagraph : textShape.getTextParagraphs()) {for (XSLFTextRun textRun : textParagraph.getTextRuns()) {textRun.setFontFamily("宋体");}}}}Dimension pageSize = pptx.getPageSize();BufferedImage bufferedImage = new BufferedImage(pageSize.width, pageSize.height, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = bufferedImage.createGraphics();graphics.setPaint(Color.white);graphics.fill(new Rectangle(pageSize));slide.draw(graphics);File imageFile = new File(imageTempDir, "slide_" + pageNum + ".png");ImageIO.write(bufferedImage, "png", imageFile);PDPage pdfPage = new PDPage(new org.apache.pdfbox.pdmodel.common.PDRectangle(pageSize.width, pageSize.height));pdfDoc.addPage(pdfPage);try (PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, pdfPage)) {PDImageXObject pdfImage = PDImageXObject.createFromByteArray(pdfDoc, Files.readAllBytes(imageFile.toPath()), "slide_" + pageNum);contentStream.drawImage(pdfImage, 0, 0);}pageNum++;}pdfDoc.save(outputStream);pdfDoc.close();// Delete temporary image filesfor (File imageFile : imageTempDir.listFiles()) {imageFile.delete();}imageTempDir.delete();System.out.println("PPTX to PDF conversion completed successfully.");} catch (IOException e) {e.printStackTrace();}}
}

相关文章:

pptx转pdf工具类

引入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxm…...

2023华为OD统一考试(B卷)题库清单(持续收录中)以及考点说明

目录 专栏导读2023 B卷 “新加题”&#xff08;100分值&#xff09;2023Q2 100分2023Q2 200分2023Q1 100分2023Q1 200分2022Q4 100分2022Q4 200分牛客练习题 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…...

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises 1. 文章简介2. 文章概括3 文章重点技术3.1 大模型面对FPQs的表现3.2 False QAs数据集3.3 训练和评估 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Won’t Get Fooled Again: Answerin…...

【Django】include app_name和namespace的区别

app_name 区分不同app的url的name&#xff0c;防止不同app之间&#xff0c;url_name的重名&#xff0c;引用时加入app_name:name namespace 区分不同路由 include同一个view module的情况&#xff0c; 让不同路由进入同一个view中&#xff0c;进行reverse时&#xff0c;根据对…...

(黑客)自学笔记

特别声明&#xff1a; 此教程为纯技术分享&#xff01;本教程的目的决不是为那些怀有不良动机的人提供及技术支持&#xff01;也不承担因为技术被滥用所产生的连带责任&#xff01;本教程的目的在于最大限度地唤醒大家对网络安全的重视&#xff0c;并采取相应的安全措施&#x…...

【期末课程设计】学生成绩管理系统

因其独特&#xff0c;因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c 2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h 前言&#xff1a; 学生成绩管理系统含教师…...

【论文笔记】KDD2019 | KGAT: Knowledge Graph Attention Network for Recommendation

Abstract 为了更好的推荐&#xff0c;不仅要对user-item交互进行建模&#xff0c;还要将关系信息考虑进来 传统方法因子分解机将每个交互都当作一个独立的实例&#xff0c;但是忽略了item之间的关系&#xff08;eg&#xff1a;一部电影的导演也是另一部电影的演员&#xff09…...

ES6:基础使用,积累

一、理解ES6 ES6是ECMAScript 6.0的简称&#xff0c;也被称为ES2015。它是ECMAScript的第六个版本&#xff0c;是JavaScript标准的下一个重大更新。ES6于2015年6月发布&#xff0c;新增了许多新的语言特性和API&#xff0c;包括箭头函数、let和const关键字、模板字符串、解构赋…...

Android端上传文件到Spring Boot后端

准备 确定好服务器端文件保存的位置确定好请求参数名&#xff08;前后端要保持一致的喔&#xff09;如果手机是通过usb连接到电脑的&#xff0c;需要执行一下&#xff1a; adb reverse tcp:8080 tcp:8080 AndroidManifest.xml的<application/>节点中加上: android:usesC…...

使用GGML和LangChain在CPU上运行量化的llama2

Meta AI 在本周二发布了最新一代开源大模型 Llama 2。对比于今年 2 月发布的 Llama 1&#xff0c;训练所用的 token 翻了一倍&#xff0c;已经达到了 2 万亿&#xff0c;对于使用大模型最重要的上下文长度限制&#xff0c;Llama 2 也翻了一倍。 在本文&#xff0c;我们将紧跟趋…...

微服务基础理论

微服务简介 微服务Microservices之父&#xff0c;马丁.福勒&#xff0c;对微服务大概的概述如下&#xff1a; 就目前而言&#xff0c;对于微服务业界并没有一个统一的、标准的定义&#xff08;While there is no precise definition of this architectural style ) 。但通在其…...

《向量数据库指南》:向量数据库Pinecone管理数据教程

目录 连接到索引 指定索引端点 调用whoami以检索您的项目名称。 描述索引统计信息 获取向量 更新向量 完整更新 ℹ️注意 部分更新 ⚠️注意 ℹ️注意 删除向量...

以深度为基础的Scikit-learn: 高级特性与最佳实践

Scikit-learn是一个广受欢迎的Python库&#xff0c;它用于解决许多机器学习的问题。在本篇文章中&#xff0c;我们将进一步探索Scikit-learn的高级特性和最佳实践。 一、管道机制 Scikit-learn的Pipeline类是一种方便的工具&#xff0c;它允许你将多个步骤&#xff08;如数据…...

Autosar MCAL-S32K324Dio配置-基于EB

文章目录 DioPost Build Variant UsedConfig VariantDioConfigDioPortDioChannelDioChannelGroupDioConfigDio Development Error DetectSIUL2 IP Dio Development Error DetectDio Version Info ApiDio Reverse Port BitsDio Flip Channel ApiDio Rea...

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…...

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…...

vue3+taro+Nutui 开发小程序(二)

上一篇我们初始化了小程序项目&#xff0c;这一篇我们来整理一下框架 首先可以看到我的项目整理框架是这样的&#xff1a; components:这里存放封装的组件 custom-tab-bar:这里存放自己封装的自定义tabbar interface&#xff1a;这里放置了Ts的一些基本泛型&#xff0c;不用…...

Transformer 模型实用介绍:BERT

动动发财的小手&#xff0c;点个赞吧&#xff01; 在 NLP 中&#xff0c;Transformer 模型架构是一场革命&#xff0c;极大地增强了理解和生成文本信息的能力。 在本教程[1]中&#xff0c;我们将深入研究 BERT&#xff08;一种著名的基于 Transformer 的模型&#xff09;&#…...

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…...

【JavaEE】Spring中注解的方式去获取Bean对象

【JavaEE】Spring的开发要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】Spring的开发要点总结&#xff08;3&#xff09;1. 属性注入1.1 Autowired注解1.2 依赖查找 VS 依赖注入1.3 配合Qualifier 筛选Bean对象1.4 属性注入的优缺点 2. Setter注入2.1 Autowired注解2.2…...

RDP Wrapper完整教程:Windows家庭版免费开启远程桌面多用户功能终极指南

RDP Wrapper完整教程&#xff1a;Windows家庭版免费开启远程桌面多用户功能终极指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法使用远程桌面功能而烦恼吗&#xff1f;RDP Wrapper Lib…...

如何精准下载GitHub项目中的特定文件或文件夹

如何精准下载GitHub项目中的特定文件或文件夹 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 在GitHub上查找开源资源时&#xff0c;开发者常常面临一个现实问题&#xff1a;如何仅获取项目中的特定模块而非整…...

华为设备Traffic Policy配置避坑指南:ACL规则顺序与Classifier匹配逻辑详解

华为设备Traffic Policy配置避坑指南&#xff1a;ACL规则顺序与Classifier匹配逻辑详解 在网络工程师的日常工作中&#xff0c;华为设备的QoS策略配置是一个既基础又复杂的话题。特别是当我们需要对特定流量进行精细控制时&#xff0c;Traffic Policy的正确配置就显得尤为重要。…...

别再傻傻分不清!一张图看懂PMOS、NMOS、CMOS在电路设计中的关键区别与选型

电子工程师必读&#xff1a;PMOS、NMOS与CMOS的实战选型指南 在电路设计的世界里&#xff0c;MOS管就像乐高积木中的基础模块&#xff0c;而PMOS、NMOS和CMOS则是三种最常用的"积木类型"。许多初学者在面对原理图上那些看似相似的符号时&#xff0c;常常感到困惑&…...

告别Anchor和NMS!用DETR在NWPU遥感数据集上跑出88%AP的保姆级教程

告别Anchor和NMS&#xff01;用DETR在NWPU遥感数据集上跑出88%AP的保姆级教程 遥感图像目标检测一直是计算机视觉领域的重要研究方向&#xff0c;但传统方法如Faster R-CNN和YOLO系列在处理遥感目标时存在诸多限制。本文将带你深入了解DETR(Detection with Transformers)这一革…...

el-tree 动态子节点注入:从点击事件到数据更新的完整实践

1. 理解动态子节点注入的核心需求 在实际开发中&#xff0c;我们经常会遇到需要动态加载树形数据的场景。比如一个文件管理系统&#xff0c;用户点击文件夹时才加载其中的内容&#xff1b;或者一个组织架构图&#xff0c;只有展开某个部门时才显示下属员工。这种按需加载的方式…...

别再只用默认配置了!手把手教你用nohup后台启动Minio并自定义账号密码(附日志查看技巧)

从零到生产级部署&#xff1a;Minio自定义配置与后台服务管理实战指南 在Linux服务器上部署对象存储服务时&#xff0c;Minio因其轻量、兼容S3协议的特性成为众多开发者的首选。但大多数教程止步于基础安装&#xff0c;忽略了生产环境所需的配置细节——这正是本文要填补的关键…...

AI编程助手配置同步工具:跨机器团队技能管理实践

1. 项目概述与核心价值最近在折腾AI编程工具链&#xff0c;发现一个挺有意思的现象&#xff1a;无论是Cursor、Claude Code&#xff0c;还是GitHub Copilot&#xff0c;它们都越来越依赖所谓的“技能”&#xff08;Skills&#xff09;或“上下文”&#xff08;Context&#xff…...

【限时决策窗口】ChatGPT Plus会员购买指南:避开3个高发误区,抓住GPT-4 Turbo+文件解析+自定义GPT三重红利期

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT Plus会员值不值得买 ChatGPT Plus 提供每月 $20 的订阅服务&#xff0c;主打 GPT-4 模型访问、高优先级响应队列、文件上传解析&#xff08;PDF/CSV/TXT 等&#xff09;及自定义 GPTs 功能。是…...

深入浅出:用Grad-CAM解锁Swin Transformer的视觉注意力

1. 为什么需要理解Swin Transformer的视觉注意力&#xff1f; 当你第一次看到Swin Transformer在图像分类任务中表现出色时&#xff0c;可能会好奇它到底"看"到了图像的哪些部分。传统的卷积神经网络&#xff08;CNN&#xff09;通过局部感受野逐步提取特征&#xff…...