从pdf提取文本数据的c/cpp库(非OCR)

Aspose.PDF for C++

商业付费版,无源码。
功能强大,支持多种PDF操作。
对应的官方示例代码:Aspose.PDF-for-C

Spire.PDF for C++

商业付费版
对应的官方示例代码:Spire.PDF-for-C-

PDFTron SDK

商业付费版

PoDoFo

开源
当前版本:Version 0.10.4 on Sep 13, 2024
文档:https://podofo.github.io/podofo/documentation/

win下编译

按照 vcpkg 快速入门指南首先设置包管理器仓库。在 Windows 中,将环境变量 VCPKG_DEFAULT_TRIPLET 设置为 x64-windows 以默认安装 64 位依赖项,并定义一个 VCPKG_INSTALLATION_ROOT 变量,指定快速入门中创建的仓库位置可能也很有用。

vcpkg安装

参考:https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started-vs?pivots=shell-powershell
git clone https://github.com/microsoft/vcpkg.git
https://github.com/microsoft/vcpkg/archive/refs/tags/2025.02.14.zip // 可以直接下载
cd vcpkg; .\bootstrap-vcpkg.bat//PowerShell
$env:VCPKG_ROOT="C:\code\vcpkg-2025.02.14"
$env:PATH="$env:VCPKG_ROOT;$env:PATH"

在powershell中确认并设置VCPKG_INSTALLATION_ROOT

PS C:\Users\s> $env:VCPKG_DEFAULT_TRIPLET
PS C:\Users\s> $env:VCPKG_DEFAULT_TRIPLET = "x64-windows"
PS C:\Users\s> $env:VCPKG_DEFAULT_TRIPLET
x64-windows
PS C:\Users\s>

vcpkg install freetype 安装失败问题

下载:https://sourceforge.net/projects/freetype/files/freetype2/2.13.3/freetype-2.13.3.tar.gz/download
解压
cd freetype-2.13.3
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=C:\code\freetype-2.13.3\install
cmake --build . --config Release
cmake --install .

将C:\code\freetype-2.13.3\install下的文件拷贝到
C:\code\vcpkg-2025.02.14\installed\x64-windows下对应目录
拷贝到C:\code\vcpkg-2025.02.14\downloads也许也可以。

在podofo源根目录下运行:

vcpkg install fontconfig freetype libxml2 openssl libjpeg-turbo libpng tiff zlib
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=C:\code\vcpkg-2025.02.14\scripts\buildsystems\vcpkg.cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug

安装失败的话,继续安装以下库

vcpkg install openssl:x64-windows
vcpkg install libxml2:x64-windows

libxml2的安装时间极长,超过半小时。
以上步骤,部分需要外网。

podofo\examples\helloworld\helloworld.cpp编译

podofo\examples\helloworld\CMakeLists.txt 改为以下代码

cmake_minimum_required(VERSION 3.10)
project(helloworld)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_compile_options(${PODOFO_CFLAGS})
add_executable(helloworld helloworld.cpp)
include_directories(${CMAKE_SOURCE_DIR}/../../src)
link_directories(${CMAKE_SOURCE_DIR}/../../build/target/Debug)
find_library(PODOFO_LIB podofo PATHS ${CMAKE_SOURCE_DIR}/../../build/target/Debug REQUIRED)
find_library(PODOFO_PRIVATE_LIB podofo_private PATHS ${CMAKE_SOURCE_DIR}/../../build/target/Debug REQUIRED)
find_library(PODOFO_3RDPARTY_LIB podofo_3rdparty PATHS ${CMAKE_SOURCE_DIR}/../../build/target/Debug REQUIRED)
target_link_libraries(helloworld ${PODOFO_LIBRARIES} ${PODOFO_LIB} ${PODOFO_PRIVATE_LIB} ${PODOFO_3RDPARTY_LIB})

缺少的podofo\src\podofo\podofo_config.h,内容如下:

#ifndef PODOFO_CONFIG_H
#define PODOFO_CONFIG_H// Template filled out by CMake
#define PODOFO_VERSION_MAJOR 0
#define PODOFO_VERSION_MINOR 10
#define PODOFO_VERSION_PATCH 4// PoDoFo configuration options// Libraries
// #define PODOFO_HAVE_JPEG_LIB
// #define PODOFO_HAVE_PNG_LIB
// #define PODOFO_HAVE_TIFF_LIB
// #define PODOFO_HAVE_FONTCONFIG
// #define PODOFO_HAVE_WIN32GDI#endif // PODOFO_CONFIG_H

在这里插入图片描述
提取文本的示例代码

#include <podofo/podofo.h>
#include <iostream>using namespace PoDoFo;void ExtractTextFromPdf(const std::string& filePath) {PdfMemDocument document;document.Load(filePath.c_str());for (int i = 0; i < document.GetPageCount(); ++i) {PdfPage* page = document.GetPage(i);PdfContentsTokenizer tokenizer(page);const char* token = nullptr;EPdfContentsType type;while (tokenizer.ReadNext(type, token)) {if (type == ePdfContentsType_String) {std::cout << token << std::endl;}}}
}int main() {ExtractTextFromPdf("example.pdf");return 0;
}

PDFium

https://github.com/chromium/pdfium

mupdf

https://github.com/ArtifexSoftware/mupdf
1.9K

Poppler

github

Xpdf

https://www.xpdfreader.com/

tesseract OCR

https://github.com/tesseract-ocr/tesseract
65.4k

推荐

如果你需要纯 C++ 实现,推荐 PoDoFo 或 Poppler。

如果你需要高性能渲染和文本提取,推荐 PDFium。

如果你需要轻量级解决方案,推荐 MuPDF 或 Xpdf。

如果你需要处理扫描版 PDF,推荐结合 Tesseract OCR。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35620.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux操作系统——学习笔记二】Linux简单导航命令操作

一、前言 学习Linux&#xff0c;本质上是学习在命令行下熟练使用Linux的各类命令。 命令行&#xff1a;是一种通过输入命令和参数与计算机系统进行交互的方式&#xff0c;可以使用各种字符化命令对系统发出操作指令&#xff0c;打开Linux终端&#xff0c;进入命令行界面。 …

赛逸展2025创新模式,以科技创新奖赋能展位战略价值

CES Asia2025第七届亚洲消费电子技术贸易展&#xff08;赛逸展&#xff09;主办方负责人提出的创新理念&#xff0c;为展会的战略价值注入了新活力&#xff1a;“我们不是在卖展位&#xff0c;而是在分发政策红利入场券——企业每平方米的展位投入&#xff0c;都可能通过科技创…

深度革命:ResNet 如何用 “残差连接“ 颠覆深度学习

一文快速了解 ResNet创新点 在深度学习的历史长河中&#xff0c;2015年或许是最具突破性的一年。这一年&#xff0c;微软亚洲研究院的何恺明团队带着名为ResNet&#xff08;残差网络&#xff09;的模型横空出世&#xff0c;在ImageNet图像分类竞赛中以3.57%的错误率夺冠&#…

将Django连接到mysql

将Django连接到mysql 文章目录 将Django连接到mysql一.按照我的文章 在Django模型中的Mysql安装 此篇 的步骤完成mysql的基础配置二.Django配置 一.按照我的文章 ‘在Django模型中的Mysql安装’ 此篇 的步骤完成mysql的基础配置 基础配置具体内容 1.打开PowerShell 安装mysql的…

Pycatia自动化开发:智能焊点生成与数据管理一体化解决方案

引言&#xff1a;机械设计自动化的新范式 在汽车白车身、航空结构件等复杂装配体设计中&#xff0c;焊点定位精度直接影响产品性能和制造可行性。传统CAD软件操作模式存在两大痛点&#xff1a;1&#xff09;重复性点创建操作效率低下&#xff1b;2&#xff09;坐标数据缺乏结构…

《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成

No26: CI/CD 流水线&#xff1a;GitHub Actions 与 Jenkins 集成 摘要 持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是现代软件开发中不可或缺的实践&#xff0c;能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…

【css酷炫效果】纯CSS实现3D翻转卡片动画

【css酷炫效果】纯CSS实现3D翻转卡片动画 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90490472 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&am…

大数据学习(72)-zookeeper选举机制

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

Maven | 站在初学者的角度配置

目录 Maven 是什么 概述 常见错误 创建错误代码示例 正确代码示例 Maven 的下载 Maven 依赖源 Maven 环境 环境变量 CMD测试 Maven 文件配置 本地仓库 远程仓库 Maven 工程创建 IDEA配置Maven IDEA Maven插件 Maven 是什么 概述 Maven是一个项目管理和构建自…

C/C++模版初阶

文章目录 C/C模版初阶泛型编程函数模版函数模版概念函数模版格式函数模版的原理函数模版的实例化模版参数的匹配原则 类模版类模版的定义格式类模版的实例化 结语 我们今天又见面了&#xff0c;给生活加点<font colorred>impetus&#xff01;&#xff01;开启今天的编程之…

c++初阶易错题(选择)

本节有32道题&#xff0c;讲的是c初阶里边我认为重要的题目&#xff0c;有兴趣可以看看十分详细&#xff0c;欢迎互相交流学习 1~10 1 A.引用必须定义时初始化&#xff0c;指针不初始化其值为随机指向 B.指针可以改变指向&#xff0c;引用不能&#xff0c;故错误 C.空指针没有…

Java 设计模式之享元模式(Flyweight Pattern)

享元模式&#xff08;Flyweight Pattern&#xff09; 是一种 结构型设计模式&#xff0c;旨在通过共享对象来有效支持大量细粒度对象的复用&#xff0c;从而减少内存占用和提高性能。其核心是 分离内部状态&#xff08;可共享&#xff09;与外部状态&#xff08;不可共享&#…

【WEB APIs】BOM-操作浏览器

目录 1. Window对象 1.1 BOM 1.2 定时器-延时函数 1.3 JS执行机制 1.4 location对象 1.5 navigator对象&#xff08;复制&#xff09; 1.6 history对象 2. 本地存储&#xff08;重点&#xff09; 2.1 介绍 2.2 分类 localStorage sessionStorage 存储复杂数据类型…

数据结构——树与二叉树

树与二叉树 1. 树的基本概念 1.1 树的定义 树(tree)是 n ( n ≥ 0 ) n(n\geq 0) n(n≥0)个结点的有限集T。当n为0时时空树&#xff0c;任意一棵非空树应该满足&#xff1a; 有且仅有一个特定的结点&#xff0c;称为树的根(root)当 n > 1 n>1 n>1时&#xff0c;其余…

K8S快速部署

前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…

Vue生命周期

一、Vue的生命周期及其阶段 Vue生命周期&#xff1a;一个Vue实例从 创建 到 销毁 的整个过程。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程&#xff0c;我们称这是 Vue 的生命周期。 生命周期的四个阶段&#xff1a;① 创建 ② 挂…

Android中的Wifi框架系列

Android wifi框架图 Android WIFI系统引入了wpa_supplicant&#xff0c;它的整个WIFI系统以wpa_supplicant为核心来定义上层接口和下层驱动接口。 Android WIFI主要分为六大层&#xff0c;分别是WiFi Settings层&#xff0c;Wifi Framework层&#xff0c;Wifi JNI 层&#xff…

Vue项目搜索引擎优化(SEO)终极指南:从原理到实战

文章目录 1. SEO基础与Vue项目的挑战1.1 为什么Vue项目需要特殊SEO处理&#xff1f;1.2 搜索引擎爬虫工作原理 2. 服务端渲染&#xff08;SSR&#xff09;解决方案2.1 Nuxt.js框架实战原理代码实现流程图 2.2 自定义SSR实现 3. 静态站点生成&#xff08;SSG&#xff09;技术3.1…

嵌入式八股RTOS与Linux---前言篇

前言 Linux与RTOS是校招八股的时候很喜欢考察的知识,在这里并没有把两个操作系统完全的独立开去讲,放在一起对比或许可能加深印象。我们讲Linux的内核有五部分组成:进程调度、内存管理、文件系统、网络接口、进程间通信,所以我也将从这五方面出发 中断管理去对比和RTOS的不同。…

centos 8安装及相关操作

安装centos 8 在VMware workstation中安装 UEFI对比BIOS有更快的启动速度、支持更大容量硬盘及 GPT 分区、图形化操作界面更友好、安全性更高、对新操作系统支持更好、硬件兼容性不断增强以及扩展性更好等。 按回车确定 重置root管理员密码 这样进入到紧急救援模式 mount -o r…