当前位置: 代码网 > it编程>编程语言>C/C++ > C++实现批量提取PDF内容

C++实现批量提取PDF内容

2025年02月11日 C/C++ 我要评论
以下分别介绍基于 c++ 批量提取 pdf 里文字内容并导出到表格,以及批量给 pdf 文件改名的实现方案、步骤和应用场景。批量提取 pdf 文字内容并导出到表格应用场景文档数据整理:在处理大量学术论

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

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

应用场景

文档数据整理:在处理大量学术论文、报告等 pdf 文档时,需要提取其中的关键信息,如标题、作者、摘要等,并整理到表格中,方便后续的数据分析和比较。

信息归档:企业或机构可能有大量的合同、协议等 pdf 文档,需要将其中的重要条款、日期、金额等信息提取出来,存储到表格中进行统一管理和查询。

实现方案和步骤

1. 选择合适的库

poppler:用于解析 pdf 文件并提取文字内容。poppler 是一个开源的 pdf 渲染库,提供了 c++ 接口,可以方便地进行 pdf 文本提取。

libxl:用于创建和操作 excel 表格。它是一个跨平台的 c++ 库,支持创建、读取和修改 excel 文件。

2. 安装依赖库

在 linux 系统上,可以使用包管理器安装 poppler 和 libxl。例如,在 ubuntu 上可以使用以下命令安装 poppler:

sudo apt-get install libpoppler-cpp-dev

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

3. 编写代码

#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. 编译和运行

使用以下命令编译代码:

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

运行生成的可执行文件:

./extract_pdf

批量给 pdf 文件改名

应用场景

文件整理:当从不同来源收集了大量 pdf 文件,文件名杂乱无章时,需要根据文件内容或特定规则对文件进行重命名,以便更好地管理和查找。

数据导入:在将 pdf 文件导入到某个系统或数据库时,要求文件名遵循一定的命名规范,此时需要对文件进行批量重命名。

实现方案和步骤

1. 选择合适的库

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

2. 编写代码

#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. 编译和运行

使用以下命令编译代码:

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

运行生成的可执行文件:

./rename_pdf

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

到此这篇关于c++实现批量提取pdf内容的文章就介绍到这了,更多相关c++提取pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com