C# 提取 PDF 文档中的文本

2023-11-06

安装 IText7

首先在 Nuget 包管理器中,安装 itext7itext7.font-asian

如果不安装 itext7.font-asian PDF 文件中有非Unicode编码的字符,将会抛出运行时异常:

iText.IO.Exceptions.IOException:找不到 CMap iText.IO.Font.Cmap.UniGB-UTF16-H

安装好了这两个组件之后,使用以下代码,从PDF文件中提取出所有的文本。

示例代码

功能封装:

public class IText7Helper
{
	public static string ExtractText(string pdfFilePath)
	{
		//创建一个PdfReader对象,用来读取pdf文件
		PdfReader pdfReader = new PdfReader(pdfFilePath);
		//创建一个PdfDocument对象,用于操作pdf文档
		PdfDocument pdfDocument = new PdfDocument(pdfReader);
		//创建一个StringBuilder对象,来存储提取的文本
		StringBuilder textBuilder = new StringBuilder();
		//获取pdf文档的总页数
		int pageCount = pdfDocument.GetNumberOfPages();
		//遍历每一页
		for (int i = 1; i <= pageCount; i++)
		{
			//获取当前页的PdfPage对象
			PdfPage pdfPage = pdfDocument.GetPage(i);
			//创建一个ITextExtractionStrategy对象,用于指定提取文本的策略
			ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
			//使用PdfTextExtractor类的GetTextFromPage方法,根据指定的策略提取当前页的文本
			string pageText = PdfTextExtractor.GetTextFromPage(pdfPage, strategy);
			//将提取的文本追加到StringBuilder对象中
			textBuilder.Append(pageText);
		}
		//关闭PdfDocument对象
		pdfDocument.Close();
		//返回StringBuilder对象中的字符串
		return textBuilder.ToString();
	}
}

调用方法:

string text = IText7Helper.ExtractText("test.pdf");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 提取 PDF 文档中的文本 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Oracle<-->MySQL

    to char 123 456 FM9 990 09 format 123 456 2 default en US 9 999 999 to char 123 cast 123 as unsigned int unsigned signed
  • 软件测试工具比较

    软件测试工具比较 作者 乔元 来源 无忧软件测试网 http www csai cn 2005年11月18日 随着软件测试的地位逐步提高 测试的重要性逐步显现 测试工具的应用已经成为了普遍的趋势 目前用于测试的工具已经比较多了 这些测试工具
  • 在Ubuntu16.04上安装QQ

    在Ubuntu16 04上安装QQ 霾大 1 个月前 最近装了双系统win10 ubuntu16 04 想在ubuntu上装个QQ 然后发现 在网上找了不少教程 都是装的wine qq 装了才发现显示版本过低 登不上去啊 后来发现用cros
  • MySQL数据库(二)SQL语言和数据类型

    成功不易 加倍努力 1 SQL语言 1 1 关系型数据库的常见组件 1 2 SQL语言的兴起与语法标准 2 管理数据库 2 1 创建数据库 2 2 修改数据库 2 3 删除数据库 2 4 查看数据库列表 3 数据类型 3 1 整数型 3 2
  • linux定时调用存储过程,linux下crontab定时执行shell脚本调用oracle 存储过程

    问题 脚本内调用存储过程 脚本直接执行没问题 使用crontab 执行脚本存储过程未执行 原因 缺少oracle环境变量 解决 在shell脚本里添加oracle的环境变量 bin sh PATH PATH HOME bin 环境变量 ex
  • 获取层级(结构树)

    public ResponseDTO
  • 使用typescript去简单的写一个时间显示的canvas小球

    在学习完了ts后 一直想找一个项目练手 可网上开源的项目 写的ts项目 还是有点复杂 不太适合刚刚学完ts想练手的同学 于是就打算自己写一个 ts小项目 大概需求就是 1 可以根据当前时间 用canvas绘制一个时间 2 可以每隔一秒 收集
  • ld 链接程序出错定位

    工具链相关问题 一般可 verbose 下 看看具体什么地方出问题 设置 LDFLAGS Wl verbose 例如 链接一堆 o文件 只有以下错误信息 ld final link failed Bad value 就可以加入 Wl ver
  • python3 中的import 和from import 使用区别(包和模块)

    python3 中的import 和from import 使用区别 包和模块 1 知识点 1 什么是包 什么是模块 2 import from import 如何使用 3 import 和 from import 使用区别 2 实现 以如
  • 【Flink】第一节 源码编译

    我认识以及改造flink的第一步从下载编译源码开始 0 环境 idea java 1 8 scala 2 12 flink 1 16 maven setting 核心 nodejs 这个去官网下载安装一下就好 npm v 显示成功就好 文末
  • 百度编程大赛试题----类似九格宫(C++算法实现)

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 在网上有讲到 lt lt 度编程大赛试题 类似九格宫的C 试题 gt gt 的文章 http hi baidu com tw
  • 基于Vue实现的用户可注册登录的Todo-List清单

    用到技术 Vue 脚手架 路由 element UI 文件目录 src components Enter vue MyBanner vue MyFooter vue MyHeader vue MyItem vue MyList vue pa
  • 定义一个表示学生信息的类Student...

    定义一个表示学生信息的类Student 要求如下 1 类Student的成员变量 nO 表示学号 name表示姓名 sex表示性别 age表示年龄 java 表示Java课程成绩 2 类Student带参数的构造方法 在构造方法中通过参数完
  • 笔记1 - Web API 的概念和http协议

    接口定义 接口是个比较泛义上的概念 主要表示系统对外交互的部分 比如电源插座是电器和电能之间的接口 图形界面是应用软件和用户的接口 医院挂号大厅是医生和病人之间的接口 webAPI 我们要学习的接口概念缩小到web系统提供的对外消息交互接口
  • C# 如何在一个项目中引用另外一个项目

    C 如何在一个项目中引用另外一个项目 直接使用 using namespace 会发现引用不了 需要先添加引用 勾上需要引用的项目 我们再用 using namespace 就会发现可以了
  • html制作自动切换的广告页,js实现每个IP每天只弹出一次广告页,js实现html自动弹出对话框...

    js实现每个IP每天只弹出一次广告页 定义Cookie function setCookie name value expire window document cookie name escape value expire null ex
  • Excalidraw 简介及 Docker Compose 部署指南

    家人们好 我们在工作生活中经常需要画些图 我们往期了已经出过draw io私有化部署的文章了 今天我要向大家介绍一款名为 Excalidraw 的绘图工具 这款工具了我个人非常喜欢使用 是因为它可以修改成类似于手写体的字体 并且可以直接绘画
  • 深度学习&图像处理(深度学习的医学图像分割3.1)

    基于深度学习的医学图像分割模型研究 曹祺炜 1 基于改进的3D FCN CRF以及MS CapsNetGAN实现脑肿瘤图像分割 图像语义分割 简单而言就是给定一张图片 对图片上的每一个像素点分类 不同颜色代表不同类别 图像分割的主要步骤 图
  • mysql安装配置——超详细图文教程

    相关资源包进群自取 953882093 1 首先单击MySQL5 5 21的安装文件 出现该数据库的安装向导界面 单击 next 继续安装 如图所示 2 在打开的窗口中 选择接受安装协议 单击 next 继续安装 如图所示 3 在出现选择安
  • C# 提取 PDF 文档中的文本

    安装 IText7 首先在 Nuget 包管理器中 安装 itext7 和 itext7 font asian 如果不安装 itext7 font asian PDF 文件中有非Unicode编码的字符 将会抛出运行时异常 iText IO