2011-01-25 46 views
3

Hy如何使用ItextSharp檢測上標?

我正在使用ITextSharp來解析pdf文件到文本輸出。 我想知道如果我可以捕捉如果PDF包含下標或上標,有誰知道如何使用ITextSharp或其他庫在PDF中的正常字符和上標之間的區別?

感謝

回答

3

聲明:我實際上沒有任何確鑿證據的情況,但...

我希望超/標是相同的正常文本。它是相同的字體,只是更小。如果碰巧與其他文本位於同一行,則超級/子級腳本會被提升和降低 - 但是您將無法使用某種明確的元標記以面向佈局的格式(如PDF)檢測到該元標記。

換句話說,我想猜想您需要通過啓發式識別超級/下標:找到與「同一」行上的其他文本相比更小並且垂直移動的文本。這是否容易做到這一點取決於PDF創建者和ITextSharp的細節,因爲即使識別「行」也不一定是直截了當的。

+0

任何人都可以提供代碼來檢測使用itextsharp下標和上標? – pdp 2013-03-23 07:13:52

0

你將不得不在這裏實現一些自定義邏輯。 PDF中沒有標記表示上標/下標,它只是坐在不同的基線上。在這種情況下,您將不得不記下您的基線(以及您的身高)。 一些快速的僞代碼:

//input -> curText 
    if(curText.Baseline > previousText.Baseline && 
     curText.Baseline < (prevText.Baseline + prevText.Height)) 
    { 
     // This is most likely superscript // 
    } 
    else if(curText.Baseline < previousText.Baseline && 
     prevText.Baseline < (curText.Baseline + curText.Height)) 
    { 
     // This is most likely subscript // 
    } 
    else 
    { 
     // This is probably normal text // 
    } 

此解決方案要求你組織一個PDF文件的徹底無組織的性質。在過去,我使用了一個自定義類的列表<>,用於將給定y座標的所有文本組織到數組中。使用這樣的東西,您可以在繪畫或以其他方式傳輸它們之前,比較單獨的線條,並對他們做任何可能需要的工作。