【问题标题】:How to detect superscript with ItextSharp?如何使用 ItextSharp 检测上标?
【发布时间】:2013-04-26 20:19:56
【问题描述】:

Hy

我正在使用 ITextSharp 将 pdf 文件解析为文本输出。 我想知道我是否可以捕获 pdf 是否包含下标或上标,有人知道如何使用 ITextSharp 或其他库在 pdf 中区分普通字符和上标吗?

谢谢

【问题讨论】:

    标签: c# pdf itextsharp superscript


    【解决方案1】:

    免责声明:我实际上没有任何证据,但是...

    我希望超级/下标与普通文本相同。相同的字体,只是更小。如果它恰好与其他文本在同一行,则会升高和降低超级/子脚本 - 但您将无法使用面向布局的格式(如 PDF)中的某些显式元标记来检测它。

    换句话说,我您需要通过启发式方法识别上标/下标:与“相同”行上的其他文本相比,找到更小且垂直移位的文本。这是否容易做到取决于 PDF 创建者和 ITextSharp 的详细信息,因为即使识别“线”也不一定简单。

    【讨论】:

    • 谁能提供代码来使用itextsharp检测下标和上标?
    • 您可能想问一个新问题。但是,它可能会作为副本关闭,我怀疑你会找到这样的代码。
    【解决方案2】:

    您将不得不在这里实现一些自定义逻辑。 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 文件完全无组织的性质。过去,我使用自定义类的 List 来将给定 y 坐标的所有文本组织到数组中。使用类似的方法,您可以比较单独的线条,并在绘制或以其他方式传输它们之前对它们进行任何您可能想要的工作。

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2015-07-31
      • 2017-03-29
      • 1970-01-01
      相关资源
      最近更新 更多