在iPhone上进行PDFsearch
两天后,试图从PDF阅读使用Quartz的注释,我设法做到了,并张贴我的代码 。
现在我想为另一个常见问题做同样的事情:用QuartzsearchPDF文档。 和以前一样的情况,这个问题已经被问了很多次,几乎没有实际的答案。 所以我首先需要一些指针,因为我自己还没有实现。
我试过的:
我尝试使用CGPDFScannerScan
处理TJ
和Tj
操作符 – 在某些PDF上返回正确的文本,而在其他文档中,它返回的主要是随机字母。 也许它与文本编码有关? 有人指出 ,文本块(由BT / ET运营商标记)应该被处理,但我仍然没有设法这样做。 任何人都设法从任何PDF中提取文本?
之后,通过将所有文本存储在NSMutableString
并使用rangeOfString
(如果有更好的方法请让我知道),search应该很容易。
但是如何突出结果呢? 我知道有几个操作符可以find字形的大小,所以我可以根据这些值来计算结果矩形,但是我一直在阅读规范几个小时…这是一个臃肿的混乱,我疯了。 任何人有一个实际的解释?
更新
用户Naveen Thunga发现PDFKitten是“从iOS中提取PDF数据的框架”。 我只是试图演示,它似乎工作广告。 我会用更多的PDFtesting它,并且会很快发布结果。 作为一个侧面说明,代码似乎对我来说非常好 – 如果你对这个东西是如何工作感兴趣的话,那真是太棒了。
这不是一个简单的问题来实现,但它很简单。
对于任何给定的页面,您需要使用CGPDF扫描程序API扫描页面。 您需要为影响页面中文本的PDF操作符注册callback – 不仅仅是TJ / Tj,还包括那些设置字体,影响文本绘制matrix等的callback函数。您需要构build一个状态机,用每个遇到的标记更新+参数。 您需要检查当前字体编码的文本会计。 当您find想要突出显示的文本时,您需要检查当前正在更新的文本绘图matrix以确定绘图坐标。 阅读PDF规范(版本1.7可从Adobe下载),以了解您需要关注哪些运营商。
字体编码也许是最困难的部分,因为有一些方法可以指定编码方式,其中一些是字体专有的。 大多数情况下,你可以作弊并回退ANSI编码的一个子集 – 但是这将会破坏某些具有奇怪字体的PDF。
基本上,你正在处理的页面,就像你要呈现它。
我使用PDF.js在objective-c中创build了实用程序类
这将允许显示以及searchPDF文件。
实用程序类允许search使用Highlight all search result
和“区分大小写”选项。
看看PDFsearch在行动链接
- Swift – 使用哪种types? NSString或String
- 〜/ Library / Developer / Xcode / iOS DeviceSupport / <iOS版本> / Symbols / System / Library消耗我的Mac磁盘空间14 GB
- 查看viewWillAppear:和viewDidAppear之间的框架变化:
- 在iOS上存储身份validation令牌 – NSUserDefaults与钥匙串?
- 在不使用导航控制器堆栈,子视图或模态控制器的情况下animation化视图控制器的更改?
- iOS 10“启动WebFilterlogin进程”+ Proxy-Authorization头从请求中删除
- 在iOS中创build一个整数数组
- IOS:复制文件夹中的文件
- IPv6app store拒绝