iPhone 上的 PDF 搜索
Posted
技术标签:
【中文标题】iPhone 上的 PDF 搜索【英文标题】:PDF search on the iPhone 【发布时间】:2011-05-05 01:35:32 【问题描述】:在尝试使用 Quartz 从 PDF 读取注释两天后,我设法做到了,posted my code。
现在我想对另一个常见问题做同样的事情:使用 Quartz 搜索 PDF 文档。和以前的情况一样,这个问题被问了很多次,几乎没有实际的答案。所以我首先需要一些指示,因为我自己还没有实现这个。
我尝试了什么:
我尝试使用 CGPDFScannerScan
处理 TJ
和 Tj
运算符 - 在某些 PDF 上返回正确的文本,而在其他文档上返回的大多是随机字母。 可能与文本编码有关?
有人 pointed out 应该处理文本块(由 BT/ET 运营商标记),但我仍然没有设法这样做。有人设法从任何 PDF 中提取文本吗?
之后,通过将所有文本存储在 NSMutableString
中并使用 rangeOfString
(如果有更好的方法请告诉我),搜索应该很容易。
那么如何突出显示结果?我知道有几个运算符可以找到字形大小,所以我可以根据这些值计算得到的矩形,但我已经阅读了几个小时的规范......这是一个臃肿的混乱,我快疯了。有人有实际的解释吗?
更新
用户 Naveen Thunga 发现了 PDFKitten,“一个在 ios 中从 PDF 中提取数据的框架”。我刚刚尝试了演示,它似乎像宣传的那样工作。我将使用更多的 PDF 对其进行测试,并将很快发布结果。作为旁注,代码对我来说似乎非常好——如果你对这些东西的工作原理感兴趣,那就太棒了。
【问题讨论】:
发现这个运算符集合可能有用:efreedom.com/Question/1-3627745/… Hey Brainfeeder,您找到了与突出显示搜索结果有关的任何解决方案吗? @Sarah:不,仍然没有,几天后我开始专注于其他事情...... 好吧..没问题。我上网了很多,但还没有任何办法。感谢任何方式。我发现您的代码在某些方面很有帮助! :) 能否请您重播以下链接***.com/questions/5335799/… 【参考方案1】:所以现在在 iOS 11 中,我们有了 PDFKit,搜索文本变得轻而易举
if #available(iOS 11.0, *)
let pdfDocument = PDFDocument(url: fileUrl)!
let allText = pdfDocument.string /// Gets all text in pdf separated by /n
let s: PDFSelection = pdfDocument.findString("Hello", withOptions: [])
let sWithFormatting = s!.first!.attributedString
【讨论】:
【参考方案2】:我在objective-c中使用PDF.js创建了utility class
这将允许显示和搜索 PDF 文件。
实用程序类允许使用Highlight all search result
和“区分大小写”选项进行搜索。
查看实际的 PDF 搜索Link
【讨论】:
【参考方案3】:这不是一个简单的实现问题,但它很简单。
对于任何给定的页面,您需要使用 CGPDF 扫描仪 API 扫描页面。您需要为影响页面中文本的 PDF 运算符注册回调 - 不仅是 TJ/Tj,还有那些设置字体、影响文本绘制矩阵等的回调。您需要构建一个状态机来更新每个遇到的标签+参数。您需要检查当前字体编码的文本。当您找到要突出显示的文本时,您需要检查您正在更新的当前文本绘图矩阵以确定绘图坐标。阅读 PDF 规范(1.7 版可从 Adobe 下载),了解需要注意哪些运算符。
字体编码可能是最困难的部分,因为可以指定几种编码方式,其中一些是字体专有的。大多数情况下,您可以作弊并依靠 ANSI 编码的一个子集——但这会破坏某些具有奇怪字体的 PDF。
本质上,您正在处理页面,就像您要呈现它一样。
【讨论】:
以上是关于iPhone 上的 PDF 搜索的主要内容,如果未能解决你的问题,请参考以下文章
iframe 中的 pdf 仅在 iphone/ipad 上的第一页