2013-04-23 92 views
-1

我有一套pdf,從中我想處理(VB.NET)只有那些非文本搜索,你能告訴我該怎麼做呢?如何檢測pdf是文本搜索還是非文本搜索?

+2

你有什麼試過?如果你已經展示了一些研究/代碼或更好的結果,人們更可能提供幫助。 – jordanhill123 2013-04-23 09:58:05

+0

有些人說關於檢查PDF文件的字體名稱屬性,但對於可搜索和非可文本搜索來說似乎是相同的。 – Trupti 2013-04-23 10:16:57

回答

0

我認爲這個選項可能是您的考慮因素,雖然我還沒有測試代碼,但我認爲可以通過閱讀您想要繼續的每個PDF文件的屬性來完成。

您可以檢查此鏈接:

http://www.codeguru.com/columns/vb/manipulating-pdf-files-with-itextsharp-and-vb.net-2012.htm 

你必須閱讀你繼續後立即生產者性能。這僅僅是一個例子。但我的建議請在這裏包括你的代碼,所以我們可以嘗試幫助你。祝福你

+0

它巨大,但有幫助,我會通過它。謝謝。 – Trupti 2013-04-25 05:31:46

2

一般來說,做到這一點的方法是打開每個頁面並翻錄內容流,看看是否有任何文本操作符在頁面上放置文本。

讓我解釋一下這是什麼意思 - PDF內容是一種小RPN語言,它包含以某種方式標記頁面的操作。例如,你可能會看到這樣的事情:

BT 72 400 Td /F0 12 Tf (Throatwarbler Mangrove) Tj ET 

這意味着:

  1. 開始文本區域
  2. 在PDF單位
  3. 設置文本基線的位置(72,400)
  4. 設置字體爲從當前頁面的字體資源字典
  5. 名爲F0資源繪製文本「Throatwarbler紅樹林」
  6. 結束文本區域

所以,你可以嘗試走捷徑

  1. 沒有我的網頁資源字典包含任何字體?

這在某些情況下會失敗,因爲某些PDF生成工具會將字體放入資源 字典中,並且不要使用它們(誤報)。如果頁面內容包含一個包含文本的Form XObject(false negative),它也會失敗。

  1. 我的網頁的內容流有BT/ET opertors嗎?

這會讓你更接近,但如果它們中沒有內容(誤報)或者它們不存在,但會有一個包含文本的Form XObject(false negative),將會失敗。

所以真的,要做的是執行整個頁面的內容流,包括遞歸遍歷所有的XObject以尋找文本操作符。

現在,您可以使用我的Atalasoft軟件(免責聲明,我爲Atalasoft工作並編寫了大多數PDF處理代碼,我也在使用Acrobat 1-4版本)來採取另一種方法。不要問,這個頁面是否包含任何文本,你可以問「這個頁面是否只包含一個圖像?「

bool allPagesImages = true; 
using (Document doc = new Document(inputStream)) 
{ 
    foreach (Page p in doc.Pages) 
    { 
     if (!p.SingleImageOnly) 
     { 
      allPagesImages = false; 
      break; 
     } 
    } 
} 

這將留下allPagesImages有一個相當不錯的跡象表明,每個頁面的所有圖像,如果你正在尋找OCR這是不可搜索的文件,可能是你真正想要的。

不利的一面是,這將是一個單一的謂詞非常高的價格,但它也讓你PDF光柵化和能力,直接提取圖像的文件。

現在,我毫不懷疑,一個固體工程師可以通過PDF規範工作,並編寫一些代碼來擴展iTextPdfSharp來完成這項任務我認爲,如果我坐在d擁有它,我可能能夠在幾天內編寫該謂詞,但我已經瞭解了大多數PDF規範。所以它可能會讓你更像兩個星期到一個月。所以你的選擇。