【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤

news/2025/2/13 20:03:40/

以下分别介绍基于 C++ 批量提取 PDF 里文字内容并导出到表格,以及批量给 PDF 文件改名的实现方案、步骤和应用场景。

批量提取 PDF 文字内容并导出到表格

应用场景
  • 文档数据整理:在处理大量学术论文、报告等 PDF 文档时,需要提取其中的关键信息,如标题、作者、摘要等,并整理到表格中,方便后续的数据分析和比较。
  • 信息归档:企业或机构可能有大量的合同、协议等 PDF 文档,需要将其中的重要条款、日期、金额等信息提取出来,存储到表格中进行统一管理和查询。
实现方案和步骤
1. 选择合适的库
  • Poppler:用于解析 PDF 文件并提取文字内容。Poppler 是一个开源的 PDF 渲染库,提供了 C++ 接口,可以方便地进行 PDF 文本提取。
  • LibXL:用于创建和操作 Excel 表格。它是一个跨平台的 C++ 库,支持创建、读取和修改 Excel 文件。
2. 安装依赖库

在 Linux 系统上,可以使用包管理器安装 Poppler 和 LibXL。例如,在 Ubuntu 上可以使用以下命令安装 Poppler:

bash

sudo apt-get install libpoppler-cpp-dev

对于 LibXL,需要从其官方网站下载库文件,并将其包含到项目中。

3. 编写代码

cpp

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <poppler/cpp/poppler-document.h>
#include <poppler/cpp/poppler-page.h>
#include "libxl.h"using namespace libxl;// 提取 PDF 文件中的文字内容
std::string extractTextFromPDF(const std::string& filePath) {poppler::document* doc = poppler::document::load_from_file(filePath);if (!doc || doc->is_locked()) {delete doc;return "";}std::string text;for (int i = 0; i < doc->pages(); ++i) {poppler::page* page = doc->create_page(i);if (page) {text += page->text().to_latin1();delete page;}}delete doc;return text;
}// 批量提取 PDF 文件内容并导出到 Excel 表格
void batchExtractPDFsToExcel(const std::vector<std::string>& pdfFiles, const std::string& outputFilePath) {Book* book = xlCreateBook();if (book) {Sheet* sheet = book->addSheet("PDF Text");if (sheet) {for (size_t i = 0; i < pdfFiles.size(); ++i) {std::string text = extractTextFromPDF(pdfFiles[i]);sheet->writeStr(i, 0, pdfFiles[i].c_str());sheet->writeStr(i, 1, text.c_str());}}book->save(outputFilePath.c_str());book->release();}
}int main() {std::vector<std::string> pdfFiles = {"file1.pdf","file2.pdf",// 添加更多 PDF 文件路径};std::string outputFilePath = "output.xlsx";batchExtractPDFsToExcel(pdfFiles, outputFilePath);return 0;
}
4. 编译和运行

使用以下命令编译代码:

bash

g++ -o extract_pdf extract_pdf.cpp -lpoppler-cpp -lxl

运行生成的可执行文件:

bash

./extract_pdf

批量给 PDF 文件改名

应用场景
  • 文件整理:当从不同来源收集了大量 PDF 文件,文件名杂乱无章时,需要根据文件内容或特定规则对文件进行重命名,以便更好地管理和查找。
  • 数据导入:在将 PDF 文件导入到某个系统或数据库时,要求文件名遵循一定的命名规范,此时需要对文件进行批量重命名。
实现方案和步骤
1. 选择合适的库

使用标准 C++ 库中的 <filesystem> (C++17 及以上)来处理文件和目录操作。

2. 编写代码

cpp

#include <iostream>
#include <filesystem>
#include <string>namespace fs = std::filesystem;// 批量给 PDF 文件改名
void batchRenamePDFs(const std::string& directoryPath) {int counter = 1;for (const auto& entry : fs::directory_iterator(directoryPath)) {if (entry.is_regular_file() && entry.path().extension() == ".pdf") {fs::path newPath = entry.path().parent_path() / (std::to_string(counter) + ".pdf");fs::rename(entry.path(), newPath);std::cout << "Renamed " << entry.path() << " to " << newPath << std::endl;++counter;}}
}int main() {std::string directoryPath = "./pdfs"; // 替换为实际的 PDF 文件目录batchRenamePDFs(directoryPath);return 0;
}
3. 编译和运行

使用以下命令编译代码:

bash

g++ -std=c++17 -o rename_pdf rename_pdf.cpp

运行生成的可执行文件:

bash

./rename_pdf

以上代码示例提供了基本的实现思路,你可以根据实际需求进行扩展和修改。


http://www.ppmy.cn/news/1571788.html

相关文章

使用Node.js进行串口通信

目录 一、 安装 serialport 库二.、实现方法1.打开串口并配置参数2. 向串口传递信息3. 接收串口信息4. 处理错误5. 关闭串口6. 使用解析器7. 获取串口列表 三、 完整示例代码 一、 安装 serialport 库 首先&#xff0c;需要安装 serialport 库。可以通过 npm 安装&#xff1a;…

实战教程:如何利用DeepSeek结合深度学习与NLP技术实现跨模态搜索与个性化推荐

跨模态搜索与个性化推荐是当前人工智能领域中的热门话题,DeepSeek作为结合深度学习与自然语言处理(NLP)技术的创新平台,提供了在多模态数据间进行搜索与推荐的强大能力。本教程将带你一步步实现基于DeepSeek的跨模态搜索和个性化推荐,详细讲解整个过程的实现方法,从数据准…

蓝耘智算平台部署deepseek-助力深度学习

一、deepseek的几大特点&#xff08;一&#xff09;自然语言处理能力&#xff08;二&#xff09;代码生成与编程辅助功能&#xff08;三&#xff09;数学推理与计算能力&#xff08;四&#xff09;多模态处理能力 二、蓝耘智算平台即 “元生代” 智算云平台三、蓝耘智算平台部署…

【AI时代】以聊天框的模式与本地部署DeepSeek交互 (Docker方式-Open WebUI)

一、本地部署DeepSeek 参考地址&#xff1a;(含资源下载) https://blog.csdn.net/Bjxhub/article/details/145536134二、安装Docker https://www.docker.com/ 三、拉取Open WebUI 镜像 docker pull ghcr.io/open-webui/open-webui:main 四、启动并验证 启动: docker run …

springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

体验 DeepSeek-R1:解密 1.5B、7B、8B 版本的强大性能与应用

文章目录 &#x1f34b;引言&#x1f34b;DeepSeek 模型简介&#x1f34b;版本更新&#xff1a;1.5B、7B、8B 的区别与特点&#x1f34b;模型评估&#x1f34b;体验 DeepSeek 的过程&#x1f34b;总结 &#x1f34b;引言 随着大规模语言模型的持续发展&#xff0c;许多模型在性…

玄机——第一章 应急响应-Linux入侵排查

玄机——第一章 应急响应-Linux入侵排查 目录 玄机——第一章 应急响应-Linux入侵排查1、web目录存在木马&#xff0c;请找到木马的密码提交2、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交3、不死马是通过哪个文件生成的&#xff0c;请提交文件名4、黑客留下了木马…

DotNet5在Docker中连接SqlServer2012,报错最大池超出

背景介绍 我的场景是&#xff0c;C# DotNet5程序在Docker Net5镜像中&#xff0c;链接SqlServer服务器&#xff0c;直接Open显示超时&#xff0c;执行命令报错&#xff1a;Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This …