使用Poppler构建Demo编译失败,且无法提取PDF扫描件图片
用Poppler提取扫描PDF图片及编译问题解决
提取PDF页面图片的方法
扫描生成的PDF本质是每页包含一张光栅图像,不需要遍历页面元素,直接用poppler::page的render_to_image方法就能生成对应页面的poppler::image对象,示例代码如下:
#include <poppler-document.h> #include <poppler-page.h> #include <poppler-image.h> #include <iostream> #include <string> int main() { // 加载目标PDF文档 poppler::document* doc = poppler::document::load_from_file("scan.pdf"); if (!doc) { std::cerr << "加载PDF文件失败" << std::endl; return 1; } const int total_pages = doc->pages(); for (int page_idx = 0; page_idx < total_pages; ++page_idx) { poppler::page* current_page = doc->create_page(page_idx); if (!current_page) { std::cerr << "创建第" << page_idx + 1 << "页对象失败" << std::endl; continue; } // 以300DPI渲染页面为图像(扫描件常用DPI,可按需调整) poppler::image page_img = current_page->render_to_image(300, 300); if (page_img.is_valid()) { const std::string save_path = "page_" + std::to_string(page_idx + 1) + ".png"; // 保存为PNG格式,也可指定"jpeg"等其他格式 page_img.save(save_path, "png"); std::cout << "已保存:" << save_path << std::endl; } else { std::cerr << "渲染第" << page_idx + 1 << "页图像失败" << std::endl; } delete current_page; } delete doc; return 0; }
编译失败的解决方法
能找到头文件但编译失败,大多是链接阶段缺失Poppler库或编译参数配置错误,可按以下方式处理:
- 用GCC直接编译时,通过
pkg-config自动获取编译和链接参数:g++ your_demo.cpp -o your_demo `pkg-config --cflags --libs poppler-cpp` - 用CMake构建时,需引入Poppler的依赖配置:
cmake_minimum_required(VERSION 3.10) project(PopplerImageExtract) find_package(Poppler REQUIRED) add_executable(extract_img your_demo.cpp) target_include_directories(extract_img PRIVATE ${POPPLER_INCLUDE_DIRS}) target_link_libraries(extract_img PRIVATE ${POPPLER_LIBRARIES}) - 确保已安装完整的Poppler开发包:
- Debian/Ubuntu系:
sudo apt install libpoppler-cpp-dev - Fedora/RHEL系:
sudo dnf install poppler-cpp-devel - Windows平台需确保编译环境能找到Poppler的静态/动态库文件
- Debian/Ubuntu系:
内容的提问来源于stack exchange,提问作者Dov
相关产品推荐
相关产品推荐

