2011-01-25 74 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坐标的所有文本组织到数组中。使用这样的东西,您可以在绘画或以其他方式传输它们之前,比较单独的线条,并对他们做任何可能需要的工作。