如何使用quartz搜索pdf文档中的文本

2024-04-16

我正在使用quartz 来显示pdf。我需要获取搜索文本所在页面的索引。有人可以帮助我吗?谢谢。

解决方案:有一个代码示例,用于从页面中提取文本并检查其序列。

#import <Foundation/Foundation.h>

@interface PDFSearcher : NSObject {
    CGPDFOperatorTableRef table;
    NSMutableString *currentData;
}

@property (nonatomic, retain) NSMutableString * currentData;
-(id)init;
-(BOOL)page:(CGPDFPageRef)inPage containsString:(NSString *)inSearchString;

@end

#import "PDFSearcher.h"

@implementation PDFSearcher
@synthesize currentData;
void arrayCallback(CGPDFScannerRef inScanner, void *userInfo)
{
    PDFSearcher * searcher = (PDFSearcher *)userInfo;

    CGPDFArrayRef array;

    bool success = CGPDFScannerPopArray(inScanner, &array);

    for(size_t n = 0; n < CGPDFArrayGetCount(array); n += 2)
    {
        if(n >= CGPDFArrayGetCount(array))
            continue;

        CGPDFStringRef string;
        success = CGPDFArrayGetString(array, n, &string);
        if(success)
        {
            NSString *data = (NSString *)CGPDFStringCopyTextString(string);
            [searcher.currentData appendFormat:@"%@", data];
            [data release];
        }
    }
}

void stringCallback(CGPDFScannerRef inScanner, void *userInfo)
{
    PDFSearcher *searcher = (PDFSearcher *)userInfo;

    CGPDFStringRef string;

    bool success = CGPDFScannerPopString(inScanner, &string);

    if(success)
    {
        NSString *data = (NSString *)CGPDFStringCopyTextString(string);
        [searcher.currentData appendFormat:@"%@", data];
        [data release];

    }
}

-(id)init
{
    if(self = [super init])
    {
        table = CGPDFOperatorTableCreate();
        CGPDFOperatorTableSetCallback(table, "TJ", arrayCallback);
        CGPDFOperatorTableSetCallback(table, "Tj", stringCallback);
    }
    return self;
}

-(BOOL)page:(CGPDFPageRef)inPage containsString:(NSString *)inSearchString
{
    [self setCurrentData:[NSMutableString string]];
    CGPDFContentStreamRef contentStream = CGPDFContentStreamCreateWithPage(inPage);
    CGPDFScannerRef scanner = CGPDFScannerCreate(contentStream, table, self);
    bool ret = CGPDFScannerScan(scanner);
    CGPDFScannerRelease(scanner);
    CGPDFContentStreamRelease(contentStream);
    //NSLog(@"%u, %@", [self.currentData length], self.currentData);
    return ([[self.currentData uppercaseString] 
             rangeOfString:[inSearchString uppercaseString]].location != NSNotFound);
}
@end

使用CGPDFDocument、CGPDFPage和CGPDFScanner扫描页面内容并将其解析为NSString。 然后使用 NSString 函数查找该页面上的文本。如果存在,则将相应的页码存储在某个数组中。在 for 循环中重复扫描和解析 pdf 中的页数

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

如何使用quartz搜索pdf文档中的文本 的相关文章

  • 使用 AFNetworking 的 setImageWithURL 时如何配置缓存

    我在用着setImageWithURL在我的应用程序中下载一些图像 是否可以 指定此图像必须在缓存中保存多长时间 例如 1 周 指定缓存的最大总大小有多大 例如 200 兆 查看图像缓存中有什么 清除缓存 文档 http engineeri
  • 使用 NSJSONSerialization 解析 JSON

    对此进行了太多讨论 但我不知道如何解决我的问题 这是我从 WorldWeatherOnline 获取的 JSON 数据 JSON 有效 但我不知道如何解析它 这是我的代码 后面是 JSON 请帮忙 NSError errorInfo NSD
  • iPhone - ShareKit 、 SHKm 给出“找不到文件”的编译器错误

    我在使用 ShareKit Integrated 编译我的 iphone 项目时遇到了这个问题 我正在研究这个问题 到目前为止一切都工作正常 突然现在它给了我错误 在 SHK m 文件中 import include objc objc c
  • 声音在模拟器中工作,而不是在真实 iPhone 中工作

    有几短音效播放的样本在模拟器中很好 但在真正的 iPhone 中根本不行3GS 以下是 Apple SysSound 示例中的代码 CFBundleRef mb CFBundleGetMainBundle CFURLRef soundFil
  • 如何自定义 NSSlider

    我正在尝试在 Cocoa 中实现一个具有 5 个值的自定义滑块 查看我的演示项目 可以在此处下载 http s000 tinyupload com index php file id 07311576247413689572 http s0
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • 使用 Nib 实现国际化。这真的是个好主意吗?

    在苹果文档中 他们说笔尖只需将笔尖翻译成多种语言即可实现国际化 我现在正在考虑一个更糟糕但现实的场景 你已经制作了一个巨大的用户界面 然后你将其翻译成 25 种语言 所以你会得到 25 个不同的笔尖 您还会在样式和定义 UI 方面获得巨大的
  • 带有嵌入 Flash 视频的 PDF 示例?

    有谁知道我在哪里可以查看嵌入 Flash 视频的 PDF 示例 我知道问这个问题很愚蠢 因为你会认为任何面向技术的用户都应该能够使用谷歌找到一个 但我真的找不到 我的另一个问题是 使用 C 中的 API 将 Flash 视频嵌入 PDF 文
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • iPhone,使用 isKindOfClass 是否被认为是不好的做法?

    例如 如果有一个 处理所有 类型的方法 if obj isKindOfClass class1 else if obj isKindOfClass class2 etc 这是不好的做法吗 是否有更简洁的替代方案或更好的方法来构建代码 在运行
  • 自动调整大小完成后如何获取帧大小

    我想知道 如何以及何时 viewDidLoad viewWillAppear viewDidAppear 可以获得自动调整大小以适合其父视图的 UIViews 框架大小 从你的问题中不清楚你为什么想要它 但我想这是为了布局你的子视图 幸运的
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • 更改 UITextField 辅助功能描述

    有没有办法将 UITextField 的辅助功能标签设置为 文本字段 之外的其他内容 因此 我不想将其称为 文本字段 而是将其命名为 代码验证字段 我的建议是不要试图在内置语音输出上智取系统 对于盲人用户来说 文本字段正在编辑 相当于 该项
  • MKMapView 中显示多个注释标注

    是否可以同时打开多个标注 代码 void mapViewDidFinishLoadingMap MKMapView theMapView for id
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • Monotouch 和本机 iOS 代码

    是否可以将使用 monotouch 编译的 C 库与单个应用程序中的 Objective C 前端链接起来 或者该应用程序必须是全部还是全无 这是可能的 但您不会从 MonoTouch 工具获得任何帮助 并且您无法摆脱这样一个事实 您仍然需
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平

随机推荐

  • MySQL优化INSERT速度因索引而变慢

    MySQL 文档 http dev mysql com doc refman 5 0 en insert speed html say 假设 B 树索引 表的大小会使索引的插入速度减慢 log N 这是否意味着对于每个新行的插入 插入速度将
  • Java图形图像

    嘿 我在 Jpanel 中添加以下图像 msu footprints org 2011 Aditya map jpg http msu footprints org 2011 Aditya map jpg 然后添加多边形 int x new
  • 在 Linux 上安装 tar.gz

    我已经从以下位置下载了 Node js这个链接 https nodejs org en 单击按钮时指向此链接 https nodejs org dist v4 1 2 node v4 1 2 linux x64 tar gz https n
  • 为什么 1 不大于 -0x80000000 [重复]

    这个问题在这里已经有答案了 为什么1不大于 0x80000000 我知道这与溢出有关 但有人可以解释为什么吗 0x80000000 不是一个常量吗 我认为它是 assert 1 gt 0x80000000 C 中的断言触发器 这是为什么 我
  • 使用 jQuery 动态填写表单值

    我知道如何使用纯 PHP 执行此操作 但我需要在不重新加载页面的情况下执行此操作 无论如何 jQuery 是否可以有效地拉回一些数据库结果 基于用户在表单上的第一个文本字段中输入的内容 然后使用从数据库查询拉回的数据填充剩余的一些字段 本质
  • 运行 Jest 测试并收集特定目录中所有文件的覆盖率

    我正在使用以下代码对特定文件运行 Jest 测试 jest utils spec js collectCoverageFrom utils js 如果我想测试我使用的整个目录 jest someDirectory collectCovera
  • ...此内容也应该通过 HTTPS 加载

    再会 Site https mult privet com https mult privet com 在我的 Chrome 控制台中 我看到以下错误 blocked The page at https yandex st share ya
  • Vaadin Flow 应用程序自动在明暗模式之间切换

    Vaadin Flow 14 附带了两个捆绑主题的浅色和深色版本 Lumo and Material And now 浏览器可以向主机操作系统询问用户对浅色或深色模式的偏好 https stackoverflow com q 5084016
  • 返回空字符串或空值是否有更多优势?

    如果我正在编写以下方法 例如 那么以下方法是否被认为是良好的做法 A 如果文档不存在则返回空字符串 B 返回一个null value 做了很多 Java 工作 并且 Java 中的方法需要返回类型 我的印象是返回一致的类型是最佳实践 PHP
  • 使用 jquery UI 下一个按钮提交输入字段值,php 回显结果

    我当前正在使用 jquery ui 选项卡 仅适用于下一个 上一个按钮 和文本区域 我开发了一个 ajax js 函数 它将自动提交存储在文本区域中的值 并在 tab 2 中回显结果 但我目前想将自动提交表单的方法更改为当用户单击 下一步
  • 在 Xcode 4 中编译 Java

    我知道这个问题已经流传了很长时间 Xcode 4 中的 Java 我不需要任何建议 Eclipse Netbeans 例如 我只想在 XCode4 而不是 3 中编译一些简单的 Java 代码 我设法创建了一个文件 正如预期的那样 语法和一
  • 如何使 QPlainTextEdit 看起来像 .txt 文件?

    我有一个 QPlainTextEdit 它以表格形式显示一些信息 并且我添加了将其另存为 txt 文件的选项 我建了桌子漂亮的 https pypi python org pypi PrettyTable 当我打开 txt 文件时 它看起来
  • Android 平台中的推送通知

    我正在寻找编写一个从服务器接收推送警报的应用程序 我找到了几种方法来做到这一点 SMS 拦截传入的 SMS 并从服务器发起拉取 定期轮询服务器 每个都有其自身的局限性 短信 不保证到达时间 轮询可能会耗尽电池电量 请问您有更好的建议吗 非常
  • 再次:CSS、UL/OL:自定义计数器的缩进不正确

    我在中描述了我原来的问题这个线程 https stackoverflow com questions 16521330 css ul ol incorrect indent with custom counter 简而言之 当在 UL 中使
  • php 字符串转十六进制并带有 2 的补码:

    嗨 我有一根绳子193390663我想将其转换为hex with 2 s compliment 输出是0B86E847 现在我正在使用下面的功能 但它给了我313933333930363633 public static function
  • 为什么push指令会改变rsp的值? [复制]

    这个问题在这里已经有答案了 我正在检查 Ericksons Hacking The Art of Exploitation 中的这段代码片段 void test function int a int b int c int d int fl
  • JMS 客户端应用程序错误。无法使用 URL 连接

    我正在 C 上编写客户端应用程序以连接到我的本地 JMS Weblogic Server 12c 我尝试使用这里的示例代码 http docs oracle com cd E15523 01 web 1111 e13746 app exam
  • 创建和使用 Android 的 ContentProvider

    当我调用 Android ContentProvider 时 出现以下异常 java lang RuntimeException 无法 开始活动 ComponentInfo de harm android couchone de harm
  • 在水平列表上使用鼠标滚轮进行水平滚动

    我正在尝试使用鼠标滚轮进行水平滚动 但似乎不起作用 这是我的Fiddle http jsfiddle net a3j1x47a 我的主课 selector是一个可滚动的overflow 这是 JS 我正在尝试用它初始化滚动 selector
  • 如何使用quartz搜索pdf文档中的文本

    我正在使用quartz 来显示pdf 我需要获取搜索文本所在页面的索引 有人可以帮助我吗 谢谢 解决方案 有一个代码示例 用于从页面中提取文本并检查其序列 import