2010-11-04 60 views
23

經過兩天試圖使用Quartz從PDF閱讀註釋,我已經設法做到了這一點,並且posted my code在iPhone上進行PDF搜索

現在我想爲另一個常見問題做同樣的事情:用Quartz搜索PDF文檔。與以前一樣,這個問題已經被多次提出,幾乎沒有實際的答案。所以我首先需要一些指針,因爲我自己還沒有實現。

我試了一下:

我試着用CGPDFScannerScan處理TJTj運營商 - 返回一些PDF右側的文本,而在其他文件返回大多是隨機的字母。 也許它與文本編碼有關? 有人pointed out應該處理文本塊(由BT/ET運營商標記),但我仍然沒有設法這樣做。任何人都設法從任何PDF中提取文本?

之後,通過將所有文本存儲在NSMutableString中並使用rangeOfString(如果有更好的方法,請讓我知道),搜索應該很容易。

但後來如何突出結果?我知道有幾個操作員可以找到字形大小,所以我可以根據這些值計算出結果矩形,但是我一直在閱讀規範幾個小時......這是一個臃腫的混亂,我瘋了。任何人都有實際的解釋?

更新

用戶納文Thunga發現PDFKitten, 「爲iOS中提取PDF文件數據的框架」。我只是嘗試了演示,它似乎像廣告一樣工作。我會用更多的PDF進行測試,並會很快發佈結果。作爲一個側面說明,代碼對我來說似乎非常好 - 如果你對這些東西的工作原理感興趣,那真是太棒了。

+0

發現這個集合運營商可能是有用的:http://efreedom.com/Question/1-3627745/Getting-Text-Position-Parsing-Pdf-Quartz -2D – 2010-11-15 13:30:17

+0

嗨Brainfeeder,您發現任何有關突出顯示搜索結果的解決方案? – Sarah 2011-01-13 10:48:41

+0

@Sarah:沒什麼,還是沒什麼,幾天後我開始專注於其他東西... – pt2ph8 2011-01-13 12:38:19

回答

4

這不是一個簡單的問題來實現,但它很簡單。

對於任何給定的頁面,您需要使用CGPDF掃描儀API掃描頁面。您需要爲影響頁面中文本的PDF操作符註冊回調 - 不僅僅是TJ/Tj,還包括設置字體,影響文本繪製矩陣等的回調函數。您需要構建一個狀態機,用每個遇到的標記+參數。您需要檢查當前字體編碼的文本會計。當您找到想要突出顯示的文本時,您需要檢查當前正在更新的文本繪圖矩陣以確定繪圖座標。閱讀PDF規範(版本1.7可從Adobe下載)以瞭解您需要關注哪些運營商。

字體編碼也許是最困難的部分,因爲有一些方法可以指定編碼方式,其中一些方法是字體專有的。大多數情況下,你可以作弊並回退ANSI編碼的一個子集 - 但這會在具有奇怪字體的某些PDF上中斷。

基本上,您正在處理頁面,就好像您要呈現它一樣。

2

我在Objective-C使用PDF.js

,這將使顯示以及搜索PDF文件創建utility class

實用程序類允許使用Highlight all search result和「區分大小寫」選項進行搜索。

有看在行動PDF搜索Link