首页 > 系统相关 >解决Windows Server环境下PPTX转PDF时WebP格式图片缺失

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

时间:2024-12-17 23:27:59浏览次数:14  
标签:PPTX 文件 String Windows Server WebP PDF 格式 图片

如果喜欢,欢迎关注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格式的转换。以下是一个简单的示例:

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 文件。

标签:PPTX,文件,String,Windows,Server,WebP,PDF,格式,图片
From: https://blog.csdn.net/whereabouts_/article/details/144521121

相关文章

  • Windows ANSI API 是指 Windows 操作系统 提供的一组 应用程序编程接口 (API),它们使用
    WindowsANSIAPI是指Windows操作系统提供的一组应用程序编程接口(API),它们使用ANSI字符集来处理字符串和文本数据。ANSI字符集是较为老旧的字符编码标准,通常对应的是Windows-1252编码(又称Latin-1)。这些API主要用于与字符串和字符数据交互。1. WindowsANSI......
  • MSKSSRV.SYS 是一个系统文件,通常与 Microsoft Kernel-Streaming 服务相关。它是 Windo
    MSKSSRV.SYS是一个系统文件,通常与MicrosoftKernel-Streaming服务相关。它是Windows操作系统中的一个驱动程序文件,主要用于处理音频、视频流媒体的传输与处理,尤其是涉及到多媒体设备时的音频和视频流控制。详细解释:文件名称: MSKSSRV.SYS文件类型: 驱动程序文件位置: 通......
  • Windows和Linux系统下安装Oracle数据库的详细步骤
    在Windows系统下安装Oracle数据库的一般步骤:一、系统要求检查硬件要求:确保服务器或计算机有足够的内存。对于小型测试环境,建议至少2GB内存;生产环境可能需要更多,如16GB或更高,这取决于数据库的负载和预期用途。足够的磁盘空间。Oracle软件本身可能需要数GB的空间,并且还需要为......
  • 关于Windows可信启动架构及其与安全启动共同建立的信任根
    Windows可信启动架构及其与安全启动共同建立的信任根 安全启动基于公钥基础设施(PKI)流程,在允许任何模块执行前,先对其进行严格认证。这些模块广泛包括固件驱动程序、选项ROM、磁盘上的UEFI驱动程序、UEFI应用程序或UEFI引导加载程序。通过执行前的镜像认证机制,安全启动有效降低了......
  • Windows 11找不到Wi-Fi网络?这些解决方案帮你搞定!
    Windows11找不到Wi-Fi网络?这些解决方案帮你搞定!使用疑难解答工具‌:打开Windows11的设置,进入“疑难解答”页面。点击“其他疑难解答”选项,然后找到并点击“运行Internet连接”选项。系统会自动检查并尝试修复WiFi连接问题。‌检查网络驱动‌:有时候,WiFi找不到可能是因为无......
  • Axure RP 9在Windows系统下的详细安装步骤
    下载安装包从Axure官方网站或其他可靠渠道下载AxureRP9的安装包。解压安装包鼠标右击安装包,选择“解压到AxureRP9”或使用解压软件将其解压到指定位置。运行安装程序双击打开解压后的文件夹,找到“AuxreRP-安装程序”,鼠标右击并选择“以管理员身份运行”。在弹出的安装......
  • 精通Java:如何在Windows中配置环境变量并轻松切换版本
    文章目录引言步骤1:安装Java1.1下载java1.2安装java步骤2:配置环境变量2.1配置JAVA_HOME2.2配置Path变量步骤3:验证配置3.1.打开命令提示符CMD3.2.验证java3.3验证Javac更换Java版本引言Java环境变量的配置是Java开发中一个重要的步骤。正确配置环境变量可以......
  • Windows和Mac OS系统下安装Eclipse的详细步骤
    在Windows系统下安装Eclipse的详细步骤:一、前提条件确保你的计算机已经安装了JavaDevelopmentKit(JDK),因为Eclipse是基于Java开发的集成开发环境。你可以从Oracle官方网站(https://www.oracle.com/java/technologies/javase-downloads.html)下载适合你操作系统的JDK版本。安装完......
  • nis客户端开启ypbind失败 ldap ypbind[5270]: NIS server for domain domain is not r
    nis客户端开启ypbind失败Dec1715:31:03ldapypbind[5270]:NISserverfordomainanykaisnotrespon报错解释:这条日志信息来自于一个尝试使用NIS(网络信息服务)进行域名为anyka的用户查询,但是NIS服务器没有响应。ypbind是用来绑定到NIS域的工具,它会尝试绑定到指定的NIS服务......
  • SQL Server数据库数据的导入与导出
    不同数据库之间导数据flowchartLR右键单击需要导数据的数据库--点击-->任务--点击-->导出数据点击下一步选择数据源MicrosoftOLEDBProviderforSQLServerflowchartLR选择好数据源-->设置服务器名称-->选择使用SQLServer身份验证-->输入用户名和密码-->选择需要导......