解决Windows Server环境下PPTX转PDF时WebP格式图片缺失

ops/2024/12/19 6:46:17/

如果喜欢,欢迎关注WX:攻城狮重楼

在 Windows Server 环境下,将 PPTX 文件另存为 PDF 时,遇到的一个问题是PDF中的图片部分缺失,且这些缺失的图片实际为WebP格式。本文将介绍这一问题的原因及两种解决方案。

问题原因

在Windows Server环境下,将PPTX文件另存为PDF时,若PDF中的图片部分缺失,且这些缺失的图片为WebP格式,通常是由于Windows的图片解码器不支持WebP格式导致的。这使得在转换过程中,WebP格式的图片无法正确显示在PDF文件中。

解决方案:

方案一: 安装 WebP 解码器

Microsoft Office 使用 Windows Imaging Component (WIC) 来处理图片。如果系统缺少 WebP 解码支持,可以通过安装 WebP 的 WIC 插件解决:
● 下载并安装 WebP Codec for Windows:WebP Codec下载链接
● 安装完成后,重启服务器,重新尝试将 PPTX 文件导出为 PDF。
我用夸克网盘分享了「WebpCodecSetup.exe」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/34fbb503790f
提取码:5CTQ

方案二:将 pptx 中图片转换成 jpg

如果无法直接在系统中增加 WebP 支持,可以考虑将 PPTX 文件中使用的 WebP 图片转换为其他通用格式(如 PNG 或 JPEG):

  1. 批量提取 WebP 图片:
    1.1. 打开 PPTX 文件(实际上是一个 ZIP 压缩包)。
    1.2. 将 .pptx 后缀改为 .zip,解压后找到 ppt/media 文件夹,其中存放了所有图片。
  2. 批量转换为 PNG/JPEG 格式:
    2.1. 添加依赖
    首先,在项目中添加WebP格式支持的依赖。在Maven项目中,可以添加以下依赖:
<dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version> <!-- 请检查是否有更新的版本 -->
</dependency>

2.2. 编写Java代码
接着,编写Java代码实现WebP格式图片到JPG格式的转换。以下是一个简单的示例:

java">public class LoadPicUtil {public static void main(String[] args) {String filePath = "C:\\Users\\admin\\Desktop\\image.jpg"; // 替换为你的文件路径//String filePath = "C:\\Users\\admin\\Desktop\\wallhaven-zxrrqj.webp"; // 替换为你的文件路径//String filePath = "C:\\Users\\admin\\Desktop\\wallhaven-zxrrqj.jpg"; // 替换为你的文件路径String jpgFilePath = "C:\\Users\\admin\\Desktop\\image2.jpg"; // 替换为你的文件路径try {boolean isWebP = isWebPFormat(filePath);System.out.println("Is the file a WebP format? " + isWebP);if (isWebP) {convertWebPToJpg(filePath, jpgFilePath);System.out.println("Conversion successful!");}} catch (IOException e) {e.printStackTrace();}}public static void convertWebPToJpg(String webPFilePath, String jpgFilePath) throws IOException {// 读取WebP文件File webPFile = new File(webPFilePath);BufferedImage webPImage = ImageIO.read(webPFile);// 检查是否成功读取图像if (webPImage == null) {throw new IOException("Unable to read the WebP image.");}// 将图像转换为JPEG格式并保存File jpgFile = new File(jpgFilePath);boolean success = ImageIO.write(webPImage, "jpg", jpgFile);if (!success) {throw new IOException("Unable to write the JPEG image.");}}private static final byte[] RIFF_HEADER = {'R', 'I', 'F', 'F'};private static final byte[] WEBP_HEADER = {'W', 'E', 'B', 'P'};public static boolean isWebPFormat(String filePath) throws IOException {try (InputStream inputStream = new FileInputStream(filePath)) {byte[] buffer = new byte[12]; // WebP 文件头至少有 12 字节int bytesRead = inputStream.read(buffer, 0, buffer.length);if (bytesRead < buffer.length) {return false; // 文件太短,不可能是 WebP}// 检查 "RIFF"for (int i = 0; i < RIFF_HEADER.length; i++) {if (buffer[i] != RIFF_HEADER[i]) {return false;}}// 检查 "WEBP"for (int i = 8; i < 8 + WEBP_HEADER.length; i++) {if (buffer[i] != WEBP_HEADER[i - 8]) {return false;}}return true; // 匹配成功,是 WebP 格式}}private static boolean isWebPImage(File file) throws IOException {String contentType = Files.probeContentType(file.toPath());return contentType != null && contentType.equals("image/webp");}private static Path convertWebPToJpg(Path webPFilePath) throws IOException {BufferedImage webPImage = ImageIO.read(webPFilePath.toFile());Path jpgFilePath = webPFilePath.resolveSibling(webPFilePath.getFileName() + ".jpg");ImageIO.write(webPImage, "jpg", jpgFilePath.toFile());return jpgFilePath;}}
  1. 替换 PPTX 文件中的 WebP 图片:
    将转换后的图片重新放回原位置,并重新压缩为 .pptx 文件。

http://www.ppmy.cn/ops/143108.html

相关文章

存储过程 与 存储函数的区别及用法 及 触发器 !!!

引言&#xff1a; 存储函数和存储过程&#xff0c;作为数据库中的预编译代码块&#xff0c;能够封装复杂的业务逻辑和数据处理流程&#xff0c;使得数据库操作更加简洁、易读和可维护。而触发器&#xff0c;则像是一个智能的守卫&#xff0c;能够在特定事件发生时自动执行预设的…

Liquibase结合SpringBoot使用实现数据库管理

Liquibase概述 Liquibase 是一个开源的数据库变更管理工具&#xff0c;用于跟踪、版本化、和管理数据库结构&#xff08;如表、字段、索引等&#xff09;的变更。它的目的是使数据库变更的过程更加透明、可控制、自动化&#xff0c;避免开发团队在多个环境中手动执行相同的数据…

Centos7 部署CMake3.24

移除旧版本的CMake&#xff1a; sudo yum remove cmake 下载最新版本的CMake源代码&#xff1a; wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0.tar.gz 解压源代码&#xff1a; tar -zxvf cmake-3.24.0.tar.gz 进入解压后的目录&#xff1…

计算机网络 | 2.物理层

物理层内容全部为通信原理的内容 1.物理层的基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c; 而不是指具体的传输媒体。 物理层的主要任务描述为&#xff1a;确定与传输媒体的接口的一些特性。 机械特性&#xff1a;例接口特性形状、大小、…

WPF+MVVM案例实战与特效(四十)- 一个动态流水边框的实现

文章目录 1、运行效果2、案例实现1、PointAnimationUsingKeyFrames 关键帧动画2、矩形流水边框案例2、运行效果3、关键技术点3、案例拓展:其他形状实现1、圆形流水边框2、心形流水边3、完整页面代码4、运行效果5、总结1、运行效果 2、案例实现 1、PointAnimationUsingKeyFram…

电脑文档损坏:原因剖析和修复方法

在使用电脑的过程中&#xff0c;许多用户可能会遇到文档突然提示损坏、无法打开的情况。这种情况的发生往往让人感到困惑&#xff0c;特别是当并未进行任何明显错误操作时。以下是一些常见的原因以及应对方法。 一、文档损坏的常见原因 1、非人为的异常操作&#xff1a; 在编…

linux 内核数据包处理中的一些坑和建议

1、获取IP头部 iph ip_hdr(skb); struct sk_buff { ...... sk_buff_data_t transport_header; /* Transport layer header */ sk_buff_data_t network_header; /* Network layer header */ sk_buff_data_t mac_header; /* Link layer header */ ...... } 1&#xff0…

Redis篇--数据结构篇8--Redis数据结构架构篇(全局键空间,key存储结构,值存储结构,对象头)

Redis是一个高效的内存数据库&#xff0c;它的内部实现非常精巧&#xff0c;使用了多种数据结构来优化不同场景下的性能。 1、Redis的键&#xff08;Key&#xff09;存储结构 在Redis中&#xff0c;所有的键&#xff08;Key&#xff09;都是通过字典&#xff08;Dictionary&a…