在iPhone上搜索PDF

pt2*_*ph8 23 pdf iphone objective-c ipad ios

在使用Quartz尝试从PDF读取注释两天后,我设法完成并发布了我的代码.

现在我想对另一个常见问题做同样的事情:用Quartz搜索PDF文档.与以前相同的情况,这个问题已被多次询问,几乎没有实际答案.所以我首先需要一些指针,因为我自己还没有实现.

我尝试了什么:

我尝试使用CGPDFScannerScan处理TJTj运算符 - 在某些PDF上返回正确的文本,而在其他文档上它返回大多数随机字母.也许它与文本编码有关? 有人指出应该处理文本块(由BT/ET操作符标记),但我仍然没有设法这样做.有人设法从任何PDF中提取文本吗?

之后,通过将所有文本存储在一起NSMutableString并使用rangeOfString(如果有更好的方式请告诉我),搜索应该很容易.

但那么如何突出结果呢?我知道有一些运算符可以找到字形大小,所以我可以根据这些值来计算得到的矩形,但我已经读了几个小时的规格......这是一个臃肿的混乱,我疯了.有实际解释的人吗?

更新

用户Naveen Thunga发现了PDFKitten,"用于从iOS中提取PDF数据的框架".我只是尝试了演示,它似乎像宣传的那样工作.我将用更多的PDF测试它,并很快发布结果.作为旁注,代码对我来说似乎非常好 - 如果你对这些东西是如何工作感兴趣它非常棒.

Tom*_*ift 4

这不是一个简单的实现问题,但很简单。

对于任何给定页面,您需要使用 CGPDF 扫描仪 API 扫描页面。您需要为影响页面中文本的 PDF 运算符注册回调 - 不仅仅是 TJ/Tj,还包括那些设置字体、影响文本绘制矩阵等的回调。您需要构建一个状态机,该状态机会根据每个遇到的标签进行更新+参数。您需要检查当前字体编码的文本说明。当您找到要突出显示的文本时,您需要检查正在更新的当前文本绘图矩阵以确定绘图坐标。阅读 PDF 规范(1.7 版可从 Adob​​e 下载)以了解您需要注意哪些运算符。

字体编码可能是最困难的部分,因为可以指定多种编码方式,其中一些是字体专有的。大多数情况下,您可以欺骗并依靠 ANSI 编码的子集 - 但这会破坏某些具有奇怪字体的 PDF。

本质上,您正在处理页面,就好像您要渲染它一样。