我正在使用ITextSharp來解析pdf文件到文本輸出。 我想知道如果我可以捕捉如果PDF包含下標或上標,有誰知道如何使用ITextSharp或其他庫在PDF中的正常字符和上標之間的區別?
感謝
我正在使用ITextSharp來解析pdf文件到文本輸出。 我想知道如果我可以捕捉如果PDF包含下標或上標,有誰知道如何使用ITextSharp或其他庫在PDF中的正常字符和上標之間的區別?
感謝
聲明:我實際上沒有任何確鑿證據的情況,但...
我希望超/標是相同的正常文本。它是相同的字體,只是更小。如果碰巧與其他文本位於同一行,則超級/子級腳本會被提升和降低 - 但是您將無法使用某種明確的元標記以面向佈局的格式(如PDF)檢測到該元標記。
換句話說,我想猜想您需要通過啓發式識別超級/下標:找到與「同一」行上的其他文本相比更小並且垂直移動的文本。這是否容易做到這一點取決於PDF創建者和ITextSharp的細節,因爲即使識別「行」也不一定是直截了當的。
你將不得不在這裏實現一些自定義邏輯。 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座標的所有文本組織到數組中。使用這樣的東西,您可以在繪畫或以其他方式傳輸它們之前,比較單獨的線條,並對他們做任何可能需要的工作。
任何人都可以提供代碼來檢測使用itextsharp下標和上標? – pdp 2013-03-23 07:13:52