如何从 PDF 中提取文本并解码字符?

2023-12-29

我正在使用 itextsharp 使用以下代码从 pdf 文档中提取文本:

public static bool does_document_text_have_keyword(string keyword, 
                       string pdf_src, Report report_object)  // TEST
{
    try
    {
        PdfReader pdfReader = new PdfReader(pdf_src);
        string currentText;
        int count = pdfReader.NumberOfPages;
        for (int page = 1; page <= count; page++)
        {
           ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
           currentText = PdfTextExtractor.GetTextFromPage
                           (pdfReader, page, strategy);
           currentText = Encoding.UTF8.GetString
                           (ASCIIEncoding.Convert
                             (Encoding.Default,                                 
                              Encoding.UTF8, 
                              Encoding.Default.GetBytes(currentText)));

           report_object.log(currentText);  // TEST

           if (currentText.IndexOf
                (keyword, StringComparison.OrdinalIgnoreCase) != -1) return true;
        }
        pdfReader.Close();
        return false;
    }
    catch
    {
        return false;
    }
}

但问题是,当我提取文本时,文本没有空格,就好像空格已被空字符串替换。然而在pdf文档中,其中有空格。有谁知道这里发生了什么事?


我相信您的问题是 SimpleTextExtractionStrategy。来自 API 文档:http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/SimpleTextExtractionStrategy.html http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/SimpleTextExtractionStrategy.html

如果 PDF 以非从上到下的方式呈现文本,这将导致文本无法真实表示其在 PDF 中的显示方式。该渲染器还使用基于字体规格的简单策略来确定是否应将空格插入到输出中。

尝试使用 LocationTextExtractionStrategy。它的文档指出:

跟踪页面上文本相对位置的文本提取渲染器生成的文本将与大多数 PDF 文件在屏幕上的物理布局相对一致。

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

如何从 PDF 中提取文本并解码字符? 的相关文章

  • 强制枢轴项目在显示之前预加载

    我有一个带有多个 PivotItems 的 Pivot 其中一个包含一个画布 将其项目放置在动态位置 取决于数据 我获取数据 并且可以在用户选择该项目之前将这些项目放置在其位置 这不是第一个枢轴 但是 只有当我选择 PivotItem 时
  • 在列标题上绘制矩形

    I m painting rectangle on the column headers in datagridview but on scrolling to right it disappears as in the picture s
  • 使用 ITextSharp 从内存流附加 PDF 文件时遇到问题

    我在附加内存中创建的 PDF 文件并将其附加到电子邮件模板时遇到问题 电子邮件没有任何问题 但没有附件 我不明白为什么会发生这种情况 这是该过程的完整代码 ExtendedEmailTemplate emailTemp new Extend
  • 当 edmx 文件位于单独的项目中时出错

    我有问题说 在配置中找不到指定的命名连接 或者不打算与EntityClient提供者 或无效 我的 edmx 文件位于单独的项目中 但该项目的连接字符串app config 什么可能导致问题 确保 app config 位于设置为启动项目的
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 为什么表达式树不能包含命名参数规范?

    使用 AutoMapper 我找到了一个非常适合命名参数的地方 ForMember s gt s MyProperty opt gt opt MapFrom s gt BuildMyProperty s isAdvanced false 但
  • 如何在 Mac OS X 中获取 aio 信号处理程序的用户数据

    我尝试在 Mac OS X 下使用 aio 函数进行异步文件 IO 但在将某种形式的用户数据输入信号处理程序时遇到问题 这是设置操作的代码 class aio context public aio context int fildes bo
  • WPF 通知获取属性的 PropertyChanged

    我有INotifyPropertyChanged实施使用CallerMemberName public event PropertyChangedEventHandler PropertyChanged protected virtual
  • 从 Web 浏览器控件读取 Javascript 变量

    我正在尝试读取从表单上的 WebBrowser 控件加载和调用的 Javascript 变量的值 Example index html 引用名为 test js 的 javascript 在 test js 上 创建并填充了几个变量 然后i
  • 在 C# 中将 Exe 文件作为嵌入式资源运行

    我有一个第 3 方 EXE 我只需要从我的 C 应用程序运行它 我的主要目标是对我的 C 文件中的第 3 方可执行文件进行版权保护 有没有更好的方法来做到这一点 我怎样才能做到这一点 首先将嵌入的可执行文件作为资源文件添加到您现有的资源文件
  • 图像的 EMGU/OpenCV FFT 未产生预期结果

    我正在尝试使用 EMGU 可视化图像的 FFT 这是我正在处理的图像 这是预期的结果 Here s what I get 这是我的代码 Image
  • 如何将值从控制器传递到asp.net中的视图?

    我正在开发一个应用程序 我需要将用户名的值从控制器传递到视图 我尝试了 ViewData 中给出的http msdn microsoft com en us library system web mvc viewdatadictionary
  • 底层连接已关闭:接收时发生意外错误

    我来这里是因为我在通过 ftp 协议下载一些文件时遇到问题 这很奇怪 因为它偶尔会发生 甚至对于同一个文件也是如此 只是一个精确度 我正在下载非常大的文件 从 500 Mo 到 30Go 以下是我的函数返回的异常类型 抱歉 这是法语 Sys
  • 使用日期时间作为文件名并随后解析文件名?

    我正在将文件写入硬盘 文件名是这样构建的 String Format 0 yyyy MM dd hh mm ss txt DateTime Now 例如 文件名是 2010 09 20 09 47 04 txt 现在我想在下拉列表中显示这些
  • 检查SQL Server数据库表中是否存在表或列

    在 SQL Server 数据库中创建列或表之前 我想检查所需的表和 或列是否存在 我已经四处搜寻 到目前为止发现了两种方法 我不想使用存储过程 通过使用SqlCommand ExecuteScalar 方法并捕获异常来确定表 列是否存在
  • JsonSerializer.Deserialize 失败

    考虑代码 using System using System Text Json public class Program public static void Main int id 9 string str id id var u Js
  • OpenMP while 循环中的手动同步

    我最近开始使用 OpenMP 为大学的一个项目做一些 研究 我有一个矩形且均匀分布的网格 在该网格上我使用迭代方案求解偏微分方程 因此 我基本上有两个 for 循环 网格的 x 方向和 y 方向各一个 并由 while 循环包裹以进行迭代
  • xaml.cs 文件上的 InitializeComponent() 出现错误

    有时我会收到一个红色错误 内容如下 InitializeComponent 在当前上下文中不存在 以及我的其他变量 xaml受约束的x Name The x ClassXaml 文件中的名称空间和类名确实对应于我的xaml cs file
  • Outlook 插件:从选定的日历中获取元素

    我正在创建 Outlook 加载项 我想知道如何从选定的日历中获取元素 例如 我需要从名为 myCalendar 的日历中获取所有约会项目 现在 我可以从所有日历中获取所有约会项目 谢谢你 这些额外的日历作为主日历文件夹的子文件夹提供 所以
  • C++ 中的无符号双精度?

    为什么 C 不支持无符号双精度语法 因为典型的浮点格式不支持无符号数 例如 参见此 IEEE 754 格式列表 http en wikipedia org wiki IEEE 754 2008 Formats 添加通用硬件不支持的数字格式只

随机推荐

  • 使用异或的 GetHashCode() 问题

    我的理解是 您通常应该将 xor 与 GetHashCode 一起使用来生成 int 以通过其值 而不是通过其引用 来识别数据 这是一个简单的例子 class Foo int m a int m b public int A get ret
  • OpenCV 在函数内更改 Mat(Mat 范围)

    我将 Mat 传递给另一个函数并在被调用函数内更改它 我原以为作为一个更复杂的类型 它会自动通过引用传递 以便矩阵在调用函数中发生变化 但事实并非如此 有人可以向我指出如何从函数正确返回更改后的 Mat 的解释吗 这是代码片段 void c
  • 已弃用的 CLRegion 方法 - 如何获取半径?

    我正在使用geocodeAddressString completionHandler 方法 它返回 CLPlacemarks 数组 我必须获取纬度 经度 助记名和半径 虽然获得前 3 个很容易 double lat placemark l
  • OpenFire Server 中用户的 JID 应该是什么?

    您好 我对此很陌生 我已经设置了一个 Openfire 服务器并使用 Spark IM 来测试它 但对于 Android 应用程序代码 会话中用户的 JID 应该是 我尝试过 username ip address username ip
  • 在 Windows Phone 7 上将数据保存到独立存储的最佳方式是什么?

    我想将对象持久化到独立存储中 到目前为止我可以想到这些方法 保存时将它们序列化为 xml 文件 然后在保存时将它们序列化回来 使用对象数据库 对好的或推荐的怀疑比比皆是 例子是Perst http wmpoweruser com fully
  • 如何验证 okhttp 是否使用 http/2 进行请求?

    如何验证 okhttp 是否成功协商 http 2 并且没有使用 https 1 1 我可以检查回复中的一些信息吗 谢谢 托尼 仅供参考 从 okhttp 3 0 左右开始OkHttp Selected Protocol未打印 不过 可以在
  • 从服务 android 更新我的活动中的列表视图

    我有两节课 1 活动课 2 服务等级 当服务有任何更新时 我需要更新活动中的列表视图 实际上我尝试像聊天应用程序一样 我的服务总是检查我的数据库 如果它有任何新字符串 我需要在我的活动中更新而无需再次重建 只需刷新列表视图 我发现它将使用
  • 悬停时的原型 Element.toggle,禁用子元素

    我遇到以下情况 我有一个这样的表结构 tr td text td td text td td text td td a href img src a td td span style display hidden a href e a a
  • VRML 发生了什么?

    早在 20 世纪 90 年代末 当我在读研究生时 VRML 即将占领世界 我和我的同事通过将其连接到 Java 和 Javascript 代码 用它构建了各种有用且有趣的东西 当然 当时的计算机比现在慢很多倍 多核 CPU 很大程度上是科幻
  • 使用 CreateProcessWithLogonW 进行作业控制

    我正在编写的应用程序需要在主机系统上执行潜在的恶意代码 该代码仅与stdin stdout and stderr 并且不应尝试与文件系统或网络交互 我通过防火墙规则限制了网络访问 并通过以非特权用户身份运行该进程来限制文件系统访问NetUs
  • 子类中的 __slots__ 继承实际上是如何工作的?

    In the 关于槽的 Python 数据模型参考部分 http docs python org reference datamodel html slots有一个关于使用的注释列表 slots 我对第 1 条和第 6 条感到非常困惑 因为
  • VSS 到 Clearcase 的过渡,附加注释

    有没有办法执行 Clearcase 签入 其中签入注释直接附加到源文件中 这就像 VSS 所做的那样 请不要争论这是好事还是坏事 我在这里对这些事情的影响力为零 我需要将签入数据包括日期 用户和注释 通过 Clearcase 附加到文件末尾
  • 在 Window Phone 8.1 中从服务器收到原始推送通知后执行某些功能

    即使应用程序未运行 我也想在收到推送通知时执行我自己的函数 并且用户不需要单击操作栏中的通知 In the BackgroundTask cs我有以下代码片段 namespace BackgroundTasks public sealed
  • 地理位置成功回调 - 如何在此回调之外处理返回的对象?

    网络上大多数简单的 html5 地理定位示例都是这样的 if navigator geolocation navigator geolocation getCurrentPosition success error else no geol
  • iOS - watchOS 应用程序发布问题 CFBundleIdentifier 冲突

    应用程序上传后 我收到以下电子邮件 我们发现您的应用程序最近交付存在一个或多个问题 XXX 请更正以下问题 然后重新上传 ITMS 90806 CFBundleIdentifier 冲突 每个捆绑包必须有一个 唯一的包标识符 包标识符 捆绑
  • 如果容器隐藏,jQuery.validate 无效

    我有几个输入分成不同的容器 面板 我遇到的问题是 如果这些面板之一被隐藏 style display none jQuery validate 插件不会验证这些输入 我用一个小例子进行了测试 出现了同样的问题 view using Html
  • K&R 中的位计数功能 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 K R的 C程序设计语言 一书中 有一个位计数函数 int bitsCount unsigned x int b for b 0 x 0 x g
  • SQLite计算相同值不同结果

    我的表包含这个值 productName purchasePrice tax price Product 1 5099 16 10099 Product 1 5099 16 10099 Product 1 5099 16 10099 Pro
  • 来自 WSDL 的 SOAP Web 服务端点

    我是 SOAP Web 服务的新手 因此参考了使用 Spring 创建 SOAP Web 服务的教程之一 我已经从 xsd 创建了 wsdl 如下所示
  • 如何从 PDF 中提取文本并解码字符?

    我正在使用 itextsharp 使用以下代码从 pdf 文档中提取文本 public static bool does document text have keyword string keyword string pdf src Re