You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用Vips将多页PDF分页导出为独立JPEG文件的方法

问题原因

你当前代码合并输出单张JPEG的核心原因是pdfload的参数配置问题:

  • 你将n参数设置为-1,会一次性加载从page=0开始的所有PDF页面,libvips默认会将所有页面沿垂直方向拼接为单张二维图像,此时哪怕输出路径带*通配符,也不会触发多页拆分逻辑,最终只会生成一张长图。
  • libvips的通配符批量输出逻辑仅对多帧结构的图像生效,拼接完成的单张图像已经丢失了单页边界信息,无法自动拆分。
修改方案

不需要一次性加载所有页面,先读取PDF元数据获取总页数,再逐页加载、逐页输出即可,内存占用更低,也不会出现页高不统一导致的裁切错误。

修改后完整代码

#include <cstdio>
#include <vips/vips8>

using namespace vips;

int main() {
    // 初始化vips,正式工程建议增加初始化失败判断逻辑
    VIPS_INIT("pdf_split");

    const char* inputPath = "/Users/gui/Desktop/PDF_Reader/files/TEST_DOC_READER.pdf";
    const char* outputDir = "/Users/MyUser/Desktop/PDF_Reader/outputs/";
    const int renderDpi = 150;

    // 第一步:仅加载PDF元数据获取总页数,不加载实际像素,执行速度极快
    VOption* metaOption = new VOption();
    metaOption->set("dpi", renderDpi);
    metaOption->set("page", 0);
    metaOption->set("n", 0); // n=0 表示只读取文件头元数据,不加载像素内容
    VImage metaImg = VImage().pdfload(inputPath, metaOption);
    int totalPages = metaImg.get_int("n-pages");
    delete metaOption;

    // 第二步:循环逐页加载,单独保存为JPEG文件
    for (int pageIdx = 0; pageIdx < totalPages; pageIdx++) {
        VOption* pageOption = new VOption();
        pageOption->set("dpi", renderDpi);
        pageOption->set("page", pageIdx);
        pageOption->set("n", 1); // 每次仅加载1页内容

        VImage pageImg = VImage().pdfload(inputPath, pageOption);

        // 生成输出文件名,页码从1开始命名更符合日常使用习惯
        char outputPath[256];
        snprintf(outputPath, sizeof(outputPath), "%spage_%d.jpeg", outputDir, pageIdx + 1);
        // 如需自定义JPEG质量,可替换为下一行代码,Q的取值范围是1-100
        // pageImg.write_to_file(outputPath, VImage::option()->set("Q", 90));
        pageImg.write_to_file(outputPath);

        delete pageOption;
    }

    // 程序退出前释放vips资源
    vips_shutdown();
    return 0;
}

注意事项

  • 逐页加载的方式天然适配不同尺寸、不同高度的PDF页面,不会出现裁切错位问题,运行时内存占用仅为单页渲染大小,哪怕是上百页的PDF也不会出现内存占满的问题。
  • 代码中创建的VOption对象用完及时delete,避免内存泄漏。
  • 如果需要输出PNG等其他格式,直接修改输出文件名后缀即可,libvips会自动匹配对应格式的编码器。

内容的提问来源于stack exchange,提问作者Guilherme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:01:48