欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)批量提取PDF內(nèi)容

 更新時間:2025年02月10日 10:26:33   作者:平安喜樂-開開心心  
這篇文章主要為大家詳細(xì)介紹了如何使用C++批量提取PDF里文字內(nèi)容并導(dǎo)出到表格以及批量給?PDF?文件改名,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

以下分別介紹基于 C++ 批量提取 PDF 里文字內(nèi)容并導(dǎo)出到表格,以及批量給 PDF 文件改名的實(shí)現(xiàn)方案、步驟和應(yīng)用場景。

批量提取 PDF 文字內(nèi)容并導(dǎo)出到表格

應(yīng)用場景

文檔數(shù)據(jù)整理:在處理大量學(xué)術(shù)論文、報(bào)告等 PDF 文檔時,需要提取其中的關(guān)鍵信息,如標(biāo)題、作者、摘要等,并整理到表格中,方便后續(xù)的數(shù)據(jù)分析和比較。

信息歸檔:企業(yè)或機(jī)構(gòu)可能有大量的合同、協(xié)議等 PDF 文檔,需要將其中的重要條款、日期、金額等信息提取出來,存儲到表格中進(jìn)行統(tǒng)一管理和查詢。

實(shí)現(xiàn)方案和步驟

1. 選擇合適的庫

Poppler:用于解析 PDF 文件并提取文字內(nèi)容。Poppler 是一個開源的 PDF 渲染庫,提供了 C++ 接口,可以方便地進(jìn)行 PDF 文本提取。

LibXL:用于創(chuàng)建和操作 Excel 表格。它是一個跨平臺的 C++ 庫,支持創(chuàng)建、讀取和修改 Excel 文件。

2. 安裝依賴庫

在 Linux 系統(tǒng)上,可以使用包管理器安裝 Poppler 和 LibXL。例如,在 Ubuntu 上可以使用以下命令安裝 Poppler:

sudo apt-get install libpoppler-cpp-dev

對于 LibXL,需要從其官方網(wǎng)站下載庫文件,并將其包含到項(xiàng)目中。

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 文件中的文字內(nèi)容
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 文件內(nèi)容并導(dǎo)出到 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. 編譯和運(yùn)行

使用以下命令編譯代碼:

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

運(yùn)行生成的可執(zhí)行文件:

./extract_pdf

批量給 PDF 文件改名

應(yīng)用場景

文件整理:當(dāng)從不同來源收集了大量 PDF 文件,文件名雜亂無章時,需要根據(jù)文件內(nèi)容或特定規(guī)則對文件進(jìn)行重命名,以便更好地管理和查找。

數(shù)據(jù)導(dǎo)入:在將 PDF 文件導(dǎo)入到某個系統(tǒng)或數(shù)據(jù)庫時,要求文件名遵循一定的命名規(guī)范,此時需要對文件進(jìn)行批量重命名。

實(shí)現(xiàn)方案和步驟

1. 選擇合適的庫

使用標(biāo)準(zhǔn) 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"; // 替換為實(shí)際的 PDF 文件目錄
    batchRenamePDFs(directoryPath);
    return 0;
}

3. 編譯和運(yùn)行

使用以下命令編譯代碼:

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

運(yùn)行生成的可執(zhí)行文件:

./rename_pdf

以上代碼示例提供了基本的實(shí)現(xiàn)思路,你可以根據(jù)實(shí)際需求進(jìn)行擴(kuò)展和修改。

到此這篇關(guān)于C++實(shí)現(xiàn)批量提取PDF內(nèi)容的文章就介紹到這了,更多相關(guān)C++提取PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt中樹形控件Tree Widget的使用方法匯總

    Qt中樹形控件Tree Widget的使用方法匯總

    最近小編在研究Tree Widget樹形控件的相關(guān)知識,這種控件其實(shí)有時還是很有用處的,我主要利用的是帶有復(fù)選框的樹形控件,下面通過實(shí)例代碼給大家介紹下Qt中樹形控件Tree Widget的一些使用方法,感興趣的朋友一起學(xué)習(xí)吧
    2021-11-11
  • C語言中獲取進(jìn)程識別碼的相關(guān)函數(shù)

    C語言中獲取進(jìn)程識別碼的相關(guān)函數(shù)

    這篇文章主要介紹了C語言中獲取進(jìn)程識別碼的相關(guān)函數(shù),分別為getpid()函數(shù)和getppid()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • C++類與對象深入之構(gòu)造函數(shù)與析構(gòu)函數(shù)詳解

    C++類與對象深入之構(gòu)造函數(shù)與析構(gòu)函數(shù)詳解

    朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對我們對C++非常重要的一個知識點(diǎn)做出總結(jié),整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-06-06
  • C++生成格式化的標(biāo)準(zhǔn)字符串實(shí)例代碼

    C++生成格式化的標(biāo)準(zhǔn)字符串實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于C++生成格式化的標(biāo)準(zhǔn)字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C++中vector<vector<int>?>的基本使用方法

    C++中vector<vector<int>?>的基本使用方法

    vector<vector<int>?>其實(shí)就是容器嵌套容器,外層容器的元素類型是vector<int>,下面這篇文章主要給大家介紹了關(guān)于C++中vector<vector<int>?>的基本使用方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • C語言中fgets和fscanf區(qū)別詳解

    C語言中fgets和fscanf區(qū)別詳解

    這篇文章主要介紹了C語言中fgets和fscanf區(qū)別詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    這篇文章簡單給大家介紹了C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例,文章通過代碼和圖文介紹的非常詳細(xì),感興趣的同學(xué)可以參考閱讀
    2023-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)階之棧和隊(duì)列的實(shí)現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)階之棧和隊(duì)列的實(shí)現(xiàn)

    棧和隊(duì)列,嚴(yán)格意義上來說,也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯壿嬯P(guān)系為 "一對一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2021-11-11
  • C++循環(huán)隊(duì)列實(shí)現(xiàn)模型

    C++循環(huán)隊(duì)列實(shí)現(xiàn)模型

    這篇文章主要介紹了C++循環(huán)隊(duì)列實(shí)現(xiàn)模型,較為詳細(xì)的分析了循環(huán)隊(duì)列算法的原理與實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C語言判斷回文數(shù)的小例子

    C語言判斷回文數(shù)的小例子

    這篇文章主要介紹了C語言判斷回文數(shù)的小例子,有需要的朋友可以參考一下
    2014-01-01

最新評論