如何在 Swift 中获取 PDF 中的所有文本?

2024-03-08

我有一个 PDF 文档,想提取其所有文本。 我尝试了以下方法:

import Quartz

let url = NSBundle.mainBundle().URLForResource("test", withExtension: "pdf")
let pdf = PDFDocument(URL: url)
print(pdf.string())

它确实获取了文本,但是与在 Adob​​e 中打开 PDF、编辑全选、复制、粘贴相比,提取的行的顺序完全混淆了!

如何在 Swift 中获得与打开 PDF、全选、复制/粘贴相同的结果!?


如果您只想要文本内容:

  extension String
{
    func readPDF() -> String
    {
        let path = "\(self)"
        let url = URL(fileURLWithPath: path)
        let pdf = PDFDocument(url: url)
        return pdf!.string!
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中获取 PDF 中的所有文本? 的相关文章

随机推荐

  • 使用 VB.NET 的秒表循环

    我想使用 VB NET 创建一个带有此接口的简单计时器 我想按 Button1 并开始在文本框中计算秒数 我不想使用计时器组件 因为它不提供高分辨率 https stackoverflow com questions 10470276 my
  • 如何使用Content Provider实现复杂的查询?

    我问这个问题是因为我不太确定如何与 Android 内容提供商合作 我的数据库子集包含 8 个表 我需要创建复杂的查询来获取一些数据 我的内容提供程序可以很好地处理简单的查询 例如 我的表上有一个 PersonPersonModel jav
  • 检查 JavaScript 中的全局属性/函数是否已被覆盖

    JavaScript 可以轻松覆盖全局对象的属性和函数 我想找到一种方法来检查全局属性的原始版本是否已被替换 考虑有人将其放入 HTML 中 如果 myscript js 在某处调用encodeURIComponent 函数 它现在的行为将
  • 将 XX:XX AM/PM 转换为 24 小时制

    我搜索过谷歌 但找不到如何获取字符串 xx xx 上午 下午 例如下午 3 30 并将其更改为现在的 24 小时 例如 前一个时间是 15 30 我研究过简单地使用 if then 语句来操作字符串 但它看起来非常乏味 有什么简单的方法可以
  • 覆盖 Spring 表单错误消息

    在 Spring 中如何覆盖默认表单错误消息 我正在使用一个Validator和一个属性文件来添加我自己的错误消息 但是 例如 如何覆盖因转换 编码错误而打印的消息 它们似乎是自动生成的 我认为对用户没有帮助 Failed to conve
  • 如何优化查找相关性的极其缓慢的 MySQL 查询

    我有一个非常慢 通常接近 60 秒 的 MySQL 查询 它试图找到用户对一项民意调查的投票方式与他们对所有先前民意调查的投票方式之间的相关性 基本上 我们收集在给定民意调查中投票给某一特定选项的每个人的用户 ID 然后 我们查看该小组如何
  • 打开 dired 并选择与前一个缓冲区关联的文件?

    假设我正在编辑blah txt使用 Emacs 我决定打开dired以重命名文件 https stackoverflow com questions 384284 can i rename an open file in emacs 384
  • 如何使用 RxJS 对数据变化做出“反应”?

    RxJS 初学者 我在使用 RxJS 保存和跟踪数据更改时遇到问题 假设我在小视图 小部件中构建我的应用程序 每个视图 小部件都有自己的状态 并且应该对数据更改执行操作 我怎么做 更具体的例子 假设我有一个名为Widget and Widg
  • Autofac 和 Quartz.Net 集成

    有没有人有整合经验autofac and 石英网 如果是这样 最好在哪里控制生命周期管理 IJobFactory IJob 的执行中还是通过事件侦听器 现在 我正在使用自定义 autofacIJobFactory来创建IJob实例 但我没有
  • 在新门户中为辅助角色配置远程桌面

    我在新的 Windows Azure 门户中配置远程桌面连接时遇到问题 创建了一个新的工人角色 配置了远程桌面连接的过期时间 导出并上传生成的证书 发布了工作者角色 在新的 Windows Azure 门户 manage windowsaz
  • ASP.NET C# - 在服务器上保存文件流

    我有初学者的问题 如何将文件流保存到服务器上的文件 我懂了 var source Request QueryString src WebClient webclient new WebClient using Stream stream w
  • 即使使用 where 子句,“SELECT COUNT(*)”也很慢

    我试图弄清楚如何优化 MySQL 中非常慢的查询 我没有设计这个 SELECT COUNT FROM change event me WHERE change event id gt 1212281603783391 COUNT 32240
  • 如何通过蓝牙麦克风录制音频

    我正在尝试通过蓝牙耳机麦克风录制音频 但我只能听到音频 但无法通过蓝牙麦克风录制音频 而是可以从移动麦克风录制语音 我正在使用下面的代码 IntentFilter newintent new IntentFilter newintent a
  • 如何使用 Delphi 在 Openoffice 文档的页眉/页脚/表格中搜索文本标签并替换为图像

    我有打开的 Office 模板文档 我需要在其中搜索 CHART 100 等标签 并将其替换为驻留在 PC 上某个文件夹中的图像文件 我正在使用上一个问题中提到的方法 如何使用 Delphi 在 OpenOffice 文档中插入图像 htt
  • 使用Python请求模块尝试/除外的正确方法?

    try r requests get url params s thing except requests ConnectionError e print e 它是否正确 有没有更好的方法来构建这个 这会涵盖我所有的基础吗 看看请求异常文档
  • Flutter中刷新ListView

    我怎样才能刷新ListView 假设在页面 A 中 我有一个ListView 并且该行项目中有一个菜单图标 当我单击菜单图标时 它将显示一个底部工作表对话框 其中有一个删除图标 单击删除图标时 会弹出删除确认对话框 单击确认对话框中的 是
  • Gradle 无法构建 ActionBarSherlock

    我正在使用基于 IDEA 的新 Android studio 并尝试在主模块的依赖项中使用 ABS 库构建项目 我收到错误 Gradle package com actionbarsherlock app does not exist Gr
  • 标头防护难题 - 已在 .obj 问题中定义

    我有一个类 A 它必须包含两个文件 类 X 和类 Y 不幸的是 类 Y 还需要在其头文件中包含类 X 因为构造函数将指向类 X 类型的指针作为参数 潜在的问题是会出现链接器错误吗 因为类 A 现在有两份类 X 的副本 一份是它需要使用的 一
  • ORU-10027:缓冲区溢出,限制为 100000 字节

    我在 PL SQL 中生成 100k 记录时遇到以下错误 我创建了一个包并从匿名块调用该包 Error report ORA 20000 ORU 10027 buffer overflow limit of 100000 bytes ORA
  • 如何在 Swift 中获取 PDF 中的所有文本?

    我有一个 PDF 文档 想提取其所有文本 我尝试了以下方法 import Quartz let url NSBundle mainBundle URLForResource test withExtension pdf let pdf PD